@using BlazorBootstrap
@using System.Text.Json
@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">
    <div><b>Fases</b></div>
</div>

<div style="position:relative;margin-bottom: 35px;">
    <Grid TItem="URBAN.FasesURBAN"
    Class="tablaCACOA table"
    Data="listadoFases"
    AllowFiltering="false"
    PageSize="10"
    Height="100"
    EmptyText="No hay registros."
    PageSizeSelectorVisible="false"
    Responsive="true">

        <GridColumns>
            <GridColumn TItem="URBAN.FasesURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Fases" PropertyName="Denominacion" Class="colorA">
                @context.Denominacion
            </GridColumn>
            <GridColumn TItem="URBAN.FasesURBAN" HeaderText="">
                <div class="d-flex">
                    <InputNumber Min="0" class="inputForm inputTabla tdAlineadoDerecha pe-0 me-1" Value=@context.Porcentaje TValue="double" ValueExpression="() => context.Porcentaje" ValueChanged="(value) => porcentajeCambiado(value,context)"></InputNumber> %
                </div>

            </GridColumn>
        </GridColumns>
    </Grid>
    <table class="table tablaCACOA mb-0" style="position:absolute;bottom:-33px;">
        <tfoot>
            <tr>
                <td colspan="2" class="text-end fw-bold colorC">

                    <div class="d-flex justify-content-between">
                        <div class="mt-1">
                            <button @onclick="@(() => restablecerValores())" class="btnBlue d-flex align-items-center"> <i class="fas fa-undo pe-1"></i> Restablecer </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>

@code {
    [CascadingParameter]
    public TrabProfUrban _Parent { get; set; }
    [Parameter]
    public URBAN objetoURBAN { get; set; } = new URBAN();

    private double totalPorcentaje = 0;


    public List<URBAN.FasesURBAN> listadoFases { get; set; } = new List<URBAN.FasesURBAN>();

    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 = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.ToList();

        totalPorcentaje = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
    }

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

    private async void porcentajeCambiado(double e, URBAN.FasesURBAN objeto)
    {

        double porcentajeTotal = calcularPorcentaje(e, objeto);

        if (porcentajeTotal <= 100)
        {
            objeto.Porcentaje = (double)e;
            objetoURBAN.ActualizarFase(objeto);

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

            objeto.Porcentaje = 0;
            objetoURBAN.ActualizarFase(objeto);

            mensajes.Add(new ToastMessage
                {
                    Type = ToastType.Danger,
                    Message = $"La suma de los porcentajes no puede ser mayor de 100.",
                });
        }
        totalPorcentaje = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
    }

    private double calcularPorcentaje(double e, URBAN.FasesURBAN objeto)
    {
        double porcentajeTotal = 0;
        objeto.Porcentaje = e;

        int indice = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional
       .FindIndex(x => x.idFase == objeto.idFase);

        if (indice >= 0)
        {
            objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional[indice] = objeto;
        }

        porcentajeTotal = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);

        return porcentajeTotal;
    }

    private async void restablecerValores()
    {
        var lista = JsonSerializer.Deserialize<List<URBAN.FasesURBAN>>(JsonSerializer.Serialize(objetoURBAN.Enumerados.FasesTrabajo));
        objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional = lista;

        listadoFases = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.ToList();

        totalPorcentaje = objetoURBAN.TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);

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