@using BlazorBootstrap
@using bdHerramientaCACOA.db

<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />

<div class="d-flex justify-content-between mt-3 alturaTitulosTabla">
    <div><b>Costes Indirectos Anuales</b></div>

</div>
<div style="position:relative;margin-bottom: 20px;">
<Grid 
@ref="grid"
TItem="CASA.CosteIndirecto"
Class="tablaCACOA table"
Data="costesIndirectos"
AllowFiltering="false"
PageSize="10"
Height="100"
      EmptyText="No hay registros."
      PageSizeSelectorVisible="false"
Responsive="true">

    <GridColumns>
            <GridColumn TItem="CASA.CosteIndirecto" HeaderText="Concepto" HeaderTextAlignment="Alignment.Center" PropertyName="Concepto" Class="colorFilasIntro columna30Ancho">
            
                <div class="puntoInfo">
                    @if (context.idPuntoInformacion != 0 && !string.IsNullOrEmpty(objetoCASA.Enumerados.PuntosInformacion.FirstOrDefault(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion))
                    {
                        @UtilidadesCASA.CreateTooltip(objetoCASA.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == context.idPuntoInformacion).Descripcion)
                    }
                    @context.Concepto
                </div>
                
        </GridColumn>
            <GridColumn TItem="CASA.CosteIndirecto" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda columna30Ancho" HeaderText="Importe" PropertyName="importe">
                <div class="d-flex separadorMoneda">
           <CurrencyInput HideCurrencySymbol="true" TValue="double" Locale="es-ES" Min="0" class="inputForm formatoMoneda inputTabla" Value="@context.importe" ValueExpression="() => context.importe" ValueChanged="(value) => valorCambiado(value,context)"></CurrencyInput> €
                </div>
        </GridColumn>
            <GridColumn Class="text-end columna20Ancho" TItem="CASA.CosteIndirecto" HeaderText="Periodicidad">
            @*             @if (context != itemSeleccionado)
            {
                <span>@listadoPeriodos.FirstOrDefault(p => p.idEnumeracion == context.idPeriodicidad)?.ValorAlfabetico1</span>
            }
            else
            { *@
            <InputSelect Value="@context.idPeriodicidad" class="inputForm selectTabla" ValueExpression="() => context.idPeriodicidad" TValue="int" ValueChanged="(value) => valorCICambiado(value,context)">
                @foreach (var periodo in listadoPeriodos)
                {
                    <option value="@periodo.idEnumeracion">@periodo.ValorAlfabetico1</option>
                }
            </InputSelect>
            @* } *@
        </GridColumn>
            <GridColumn Class="text-end columna30Ancho" HeaderTextAlignment="Alignment.Center" TItem="CASA.CosteIndirecto" HeaderText="Coste" PropertyName="coste">
            <span >@context.coste.ToString("C", new System.Globalization.CultureInfo("es-ES"))</span>
        </GridColumn>
    </GridColumns>
</Grid>
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-19px;">
    <tfoot>
        <tr>
                <td colspan="2" class="text-end fw-bold colorC TotalesTabla">
                Total Costes Indirectos: <span>
                        @objetoCASA.DespachoProfesional.TotalCostesIndirectos.MilesYDecimales() €
                </span>
            </td>
        </tr>
    </tfoot>
</table>
</div>
@code {
    [Parameter]
    public CASA objetoCASA { get; set; }

    public List<CASA.CosteIndirecto> costesIndirectos { get; set; } = new List<CASA.CosteIndirecto>();
    private CASA.CosteIndirecto itemSeleccionado = new CASA.CosteIndirecto();

    Grid<CASA.CosteIndirecto> grid = default!;

    private List<CASA.enumeracionesCASA> listadoPeriodos = new List<CASA.enumeracionesCASA>();
    private string tituloPopup = "";
    private Modal popupGestionDatos = default!;

    private bool editarElemento;
    public tsHerramientasCACOA bd;

    List<ToastMessage> mensajes = new List<ToastMessage>();


    [CascadingParameter]
    public DespachoProfesional _Parent { get; set; }

    [CascadingParameter]
    public HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfesionalURBAN _OtroParent { get; set; }

    protected override async Task OnInitializedAsync()
    {
        bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
        listadoPeriodos = objetoCASA.Enumerados.Periodos.ToList();
        //costesIndirectos = objetoCASA.DespachoProfesional.CostesIndirectos.ToList();

    }

    protected override void OnParametersSet()
    {
        costesIndirectos = objetoCASA.DespachoProfesional.CostesIndirectos.ToList();

        StateHasChanged();
    }

    private async Task OnRowClick(GridRowEventArgs<CASA.CosteIndirecto> objeto)
    {
        itemSeleccionado = objeto.Item;
    }
    private async void valorCambiado(double e,CASA.CosteIndirecto objeto)
    {

        if (objeto.idPeriodicidad != 0)
        {
            objeto.importe = (double)e;
            objetoCASA.ActualizarCosteIndirecto(objeto);

            await InvokeAsync(StateHasChanged);
            refrescarPadre();


        }
    }
    private async void valorCICambiado(int e, CASA.CosteIndirecto objeto)
    {
        objeto.idPeriodicidad = (int)e;
        objetoCASA.ActualizarCosteIndirecto(objeto);

        await InvokeAsync(StateHasChanged);
        refrescarPadre();

    }

    private async void guardar(CASA.CosteIndirecto objeto)
    {
        objetoCASA.ActualizarCosteIndirecto(objeto);

        // mensajes.Add(new ToastMessage
        //     {
        //         Type = ToastType.Primary,
        //         Message = $"Guardado correctamente.",
        //     });

        costesIndirectos = objetoCASA.DespachoProfesional.CostesIndirectos.ToList();
        await InvokeAsync(StateHasChanged);
        refrescarPadre();
    }

    private void limpiarDatos(CASA.CosteIndirecto objeto)
    {
        objetoCASA.LimpiarCosteIndirecto(objeto);
    }


    private void refrescarPadre()
    {
        if (_Parent != null)
        {
            _Parent.RefreshState();
        }
        else if (_OtroParent != null)
        {
            _OtroParent.RefreshState();
        }
    }
}
