@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">
    <div><b>Fases</b></div>
</div>

<div class="col-md-12">
    <div style="position:relative;margin-bottom: 19px;">
        <Grid TItem="CASA.FasesTrabajo"
              Class="tablaCACOA table"
              Data="listadoFases"
              AllowFiltering="false"
              PageSize="10"
              Height="100"
              EmptyText="No hay registros."
              PageSizeSelectorVisible="false"
              Responsive="true">

            <GridColumns>
                <GridColumn TItem="CASA.FasesTrabajo" HeaderTextAlignment="Alignment.Center" HeaderText="Fases" PropertyName="Denominacion" Class="colorFilasIntro">
                    @context.Denominacion
                </GridColumn>
                <GridColumn TItem="CASA.FasesTrabajo" Class="justify-content-end" HeaderText="">
                    <div class="d-flex align-items-center justify-content-end gap-2">
                        <span class="align-middle">@context.Porcentaje.ToString() %</span>
                        <input type="checkbox"
                               class="form-check-input"
                               checked="@context.Seleccionado"
                               @onchange="(e) => PorcentajeCambiado(((ChangeEventArgs)e).Value is bool b && b, context)" />
                    </div>

                </GridColumn>
            </GridColumns>
        </Grid>
        @* <p><b class="Fuente2">TOTAL:</b> @totalPorcentaje %</p> *@
        <table class="table tablaCACOA mb-0" style="position:absolute;bottom:-18px;">
            <tfoot>
                <tr>
                    <td colspan="2" class="text-end fw-bold colorC">
                        <div class="d-flex justify-content-end">
                            @* <div class="mt-1">
                            <button @onclick="@(() => restablecerValores())" class="btnBlue d-flex align-items-center"> <i class="fas fa-undo pe-1"></i> Restablecer valores</button>
                            </div> *@
                            <div style="align-self: center;">
                                @if (totalPorcentaje != 100)
                                {
                                    <div>
                                        Trabajo en misión parcial: <span> @totalPorcentaje %</span>
                                    </div>
                                }
                                else
                                {
                                    <div>
                                        Total: <span> @totalPorcentaje %</span>
                                    </div>
                                }
                            </div>
                        </div>
                    </td>
                </tr>
            </tfoot>
        </table>
    </div>
</div>

@code {
    [CascadingParameter]
    public Licitaciones _Parent { get; set; }

    private double totalPorcentaje = 0;
    private bool isChecked;
    [Parameter]
    public LICITACIONES objetoLicitaciones { get; set; } = new LICITACIONES();

    public List<CASA.FasesTrabajo> listadoFases { get; set; } = new List<CASA.FasesTrabajo>();
    public List<CASA.FasesTrabajo> listadoFasesAux { get; set; } = new List<CASA.FasesTrabajo>();


    private string tituloPopup = "";
    private Modal popupGestionDatos = default!;
    private Modal popupConfirmarBorrado = default!;

    private CASA.FasesTrabajo itemSeleccionado = new CASA.FasesTrabajo();


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

    protected override async Task OnInitializedAsync()
    {
        listadoFases = objetoLicitaciones.FasesTrabajo.ToList();

        foreach (var fase in listadoFases)
        {
            listadoFasesAux.Add(new CASA.FasesTrabajo
                {
                    Codigo = fase.Codigo,
                    Denominacion = fase.Denominacion,
                    idFase = fase.idFase,
                    Porcentaje = fase.Porcentaje
                });
        }

        totalPorcentaje = listadoFases
            .Where(f => f.Seleccionado)
            .Sum(f => f.Porcentaje);
    }

    private async Task OnRowClick(GridRowEventArgs<CASA.FasesTrabajo> objeto)
    {
        itemSeleccionado = objeto.Item;
    }

    private void PorcentajeCambiado(bool value, CASA.FasesTrabajo item)
    {
        item.Seleccionado = value;
        RecalcularTotal(item);

    }
    private async void RecalcularTotal(CASA.FasesTrabajo item)
    {
        totalPorcentaje = listadoFases
           .Where(f => f.Seleccionado)
           .Sum(f => f.Porcentaje);

        if (totalPorcentaje <= 100)
        {
            objetoLicitaciones.ActualizarFase(item);
        }
        else
        {
            item.Porcentaje = 0;
            objetoLicitaciones.ActualizarFase(item);


            mensajes.Add(new ToastMessage
                {
                    Type = ToastType.Danger,
                    Message = $"La suma de los porcentajes no puede ser mayor de 100.",
                });
        }

        await InvokeAsync(StateHasChanged);
        _Parent.RefreshState();

        totalPorcentaje = listadoFases
            .Where(f => f.Seleccionado)
            .Sum(f => f.Porcentaje);
    }

    // private async void porcentajeCambiado(double e, CASA.FasesTrabajo objeto)
    // {

    //     double porcentajeTotal = calcularPorcentaje(e, objeto);



    //     totalPorcentaje = objetoLicitaciones.FasesTrabajo.Sum(x => x.Porcentaje);
    // }

    // private double calcularPorcentaje(double e, CASA.FasesTrabajo objeto)
    // {
    //     double porcentajeTotal = 0;
    //     objeto.Porcentaje = e;

    //     int indice = objetoLicitaciones.FasesTrabajo.ToList().IndexOf(objeto);
    //     objetoLicitaciones.FasesTrabajo[indice] = objeto;

    //     porcentajeTotal = objetoLicitaciones.FasesTrabajo.Sum(x => x.Porcentaje);

    //     return porcentajeTotal;
    // }


    private async void restablecerValores()
    {
        for (int i = 0; i < listadoFasesAux.Count; i++)
        {
            objetoLicitaciones.FasesTrabajo[i].Porcentaje = listadoFasesAux[i].Porcentaje;
        }

        objetoLicitaciones.CalcularHorasSuperficie();

        //Comprobar si esta va aqui, porque sino no modifca el precio licitación/concurso
        objetoLicitaciones.CalcularCostesProduccion();

        totalPorcentaje = objetoLicitaciones.FasesTrabajo.Sum(x => x.Porcentaje);

        await InvokeAsync(StateHasChanged);
        _Parent.RefreshState();
    }
}
