@using BlazorBootstrap
@using bdHerramientaCACOA.HerramientaURBAN
@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" HeaderTextAlignment="Alignment.Center" HeaderText="Concepto" PropertyName="Concepto" Class="colorFilasIntro">
                @context.Concepto
            </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" HeaderTextAlignment="Alignment.Center" TItem="CASA.CosteIndirecto" HeaderText="Periocidad">
                @*             @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">
                    Total Costes Indirectos: <span>
                        @objetoURBAN.DespachoProfesional.TotalCostesIndirectos.MilesYDecimales() €
                    </span>
                </td>
            </tr>
        </tfoot>
    </table>
</div>
@code {
    [Parameter]
    public URBAN objetoURBAN { get; set; } = new URBAN();

    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 DespachoProfesionalURBAN _Parent { get; set; }

    // CAMBIAR POR LA OTRA PAGINA QUE LLAMA A CLONAR DESPACHO Y CAMBIAR ABAJO EN LA FUNCION
    [CascadingParameter]
    public HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfesionalURBAN _OtroParent { get; set; }

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

    }

    protected override void OnParametersSet()
    {
        costesIndirectos = objetoURBAN.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;
            objetoURBAN.ActualizarCosteIndirecto(objeto);

            await InvokeAsync(StateHasChanged);
            refrescarPadre();


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

        await InvokeAsync(StateHasChanged);
        refrescarPadre();

    }

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

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

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

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


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