@using BlazorBootstrap
@using System.Text.RegularExpressions

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

<Modal @ref="popupConfirmarBorrado" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
    <BodyTemplate>
        <div class="col-12 formatoCampos">
            ¿Estás seguro que desea eliminarlo?
        </div>
    </BodyTemplate>
    <FooterTemplate>
        <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupConfirmarBorrado">Cerrar</Button>
        <Button @onclick="@(() => BorrarItem())" Color="ButtonColor.Danger">Eliminar</Button>
    </FooterTemplate>
</Modal>
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
    <BodyTemplate>
        <div class="row">
            <div class="col-12 formatoCampos">
                <label class="tituloLbl">Denominación grupo:</label>
                <InputText @bind-Value="itemSeleccionadoTemporal.Nombre" class="inputForm" list="sugerenciasGrupo"></InputText>

                <datalist id="sugerenciasGrupo">
                    @foreach (var grupo in grupos)
                    {
                        <option value="@grupo" />
                    }
                </datalist>
            </div>
        </div>
        <div class="row">
            <div class="col-6 formatoCampos">
                <label class="tituloLbl">Coste anual:</label>
                <div class="d-flex" style="gap:3px;">
                    <NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.CosteAnual" class="inputForm derecha formatoMoneda"></NumberInput> €
                </div>
            </div>

            <div class="col-6 formatoCampos">
                <label class="tituloLbl">Jornada laboral:</label>
                <div class="d-flex" style="gap:3px;">
                    <NumberInput TValue="double" Min="0" @bind-Value="itemSeleccionadoTemporal.JornadaLaboral" class="inputForm derecha"></NumberInput> h/sem
                </div>
            </div>
        </div>
        <div class="row">

            <div class="col-6 formatoCampos">
                <label class="tituloLbl">
                    <Tooltip Title=@tituloInfo class="custom-tooltip" role="button">
                        <Icon Name="IconName.InfoCircleFill" Class="text-primary"></Icon>
                    </Tooltip>
                    Porcentaje producción:
                </label>
                <div class="d-flex" style="gap:3px;">

                    <NumberInput TValue="double" Step="1" Min="0" @oninput="EvitarDecimalesPorcentaje" @bind-Value:format="F0" @bind-Value="itemSeleccionadoTemporal.PorcentajeProduccion" class="inputForm derecha"></NumberInput> %
                </div>
            </div>

            <div class="col-6 formatoCampos">
                <label class="tituloLbl">Nº de trabajadores:</label>
                <NumberInput TValue="double" Step="1" @oninput="EvitarDecimalesTrabajores" Min="0" @bind-Value="itemSeleccionadoTemporal.NumTrabajadores" class="inputForm derecha"></NumberInput>

            </div>
        </div>
    </BodyTemplate>
    <FooterTemplate>
        <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
        @if (!nuevoElemento)
        {
            <Button @onclick="@(() => GestionarDatos("update"))" Color="ButtonColor.Primary">Modificar</Button>
        }
        else
        {
            <Button @onclick="@(() => GestionarDatos("create"))" Color="ButtonColor.Primary">Añadir</Button>
        }
    </FooterTemplate>
</Modal>

<div class="d-flex justify-content-between mt-3 alturaTitulosTabla">
    <div><b>Costes Directos Anuales del Personal</b></div>
</div>
<div style="position:relative;margin-bottom: 45px;">
	<Grid TItem="CASA.Trabajador"
		  Class="tablaCACOA table"
		  Data="Trabajadores"
		  AllowFiltering="false"
		  PageSize="10"
		  EmptyText="No hay registros."
		  PageSizeSelectorVisible="false"
		  Responsive="true">

		<GridColumns>
            <GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Denominación del grupo" PropertyName="Nombre" Class="colorA">
				@context.Nombre
			</GridColumn>
            <GridColumn TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" Class="formatoMoneda text-end" HeaderText="Coste anual" PropertyName="CosteAnual">
				<span>@context.CosteAnual.MilesYDecimales() €</span>
			</GridColumn>
            <GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Jornada laboral" PropertyName="JornadaLaboral">
                @context.JornadaLaboral.MilesYDecimales() h
			</GridColumn>
            <GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Porcentaje producción" PropertyName="PorcentajeProduccion">
				@context.PorcentajeProduccion %
			</GridColumn>
			<GridColumn Class="text-end" TItem="CASA.Trabajador"HeaderTextAlignment="Alignment.Center" HeaderText="Nº de trabajadores" PropertyName="NumTrabajadores">
				@context.NumTrabajadores
			</GridColumn>
            <GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Coste Anual" PropertyName="CosteAnualTotal">
                @context.CosteAnualTotal.MilesYDecimales() €
			</GridColumn>
            <GridColumn Class="text-end" TItem="CASA.Trabajador" HeaderTextAlignment="Alignment.Center" HeaderText="Horas Producción" PropertyName="HorasProduccion">
                @context.HorasProduccion.MilesYDecimales() h
			</GridColumn>
            <GridColumn TItem="CASA.Trabajador" Class="botonesTabla" HeaderText="">
                <div class="btnTablasEspaciado">
                    <span @onclick="@(() => abrirPopupGestionDatos(@context,false))" class="btnBorrarGuardar">
					<Icon CustomIconName="fas fa-edit"></Icon>
				</span>
                    <span @onclick="@(() => abrirPopupConfirmarBorrado(@context))" class="btnBorrarGuardar">
					<Icon CustomIconName="fas fa-trash"></Icon>
				</span>
                </div>
				
			</GridColumn>
		</GridColumns>
	</Grid>
	<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-50px;">
		<tfoot>
			<tr>
                <td colspan="2" class="text-end fw-bold colorC TotalesTabla">
                    <div class="d-flex justify-content-between">
                        <div class="mt-1">
                            <button @onclick="@(() => abrirPopupGestionDatos(new CASA.Trabajador(),true))" class="btnBlue d-flex align-items-center"> <i class="fas fa-plus-square pe-1"></i>Nuevo Grupo de Trabajador</button>
                        </div>
                        <div>
                            <span>Total Coste Anual: @objetoCASA.DespachoProfesional.CostesDirectosAnuales.MilesYDecimales() €</span><br />
                            <span>Total Horas Producción: @objetoCASA.DespachoProfesional.HorasTotalesProduccion.MilesYDecimales() h</span>
                        </div>
                    </div>
                   
				</td>
			</tr>
		</tfoot>
	</table>
</div>

@code {
    [Parameter]
    public CASA objetoCASA { get; set; } = new CASA();

    public List<CASA.Trabajador> Trabajadores { get; set; } = new List<CASA.Trabajador>();

    private CASA.Trabajador itemSeleccionado = new CASA.Trabajador();
    private CASA.Trabajador itemSeleccionadoTemporal = new CASA.Trabajador();

    private List<string> grupos = new()
{
    "Arquitecto/a",
    "Arquitecto/a técnico/a",
    "Delineante",
    "Administrativo/a"
};

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

    private string tituloInfo = "";

    private bool nuevoElemento;

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

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

    protected override async Task OnInitializedAsync()
    {
        tituloInfo = "Es el porcentaje de tiempo que el empleado destina a la producción del trabajo profesional concreto, dedicando el resto del tiempo a otras tareas del despacho.";
    }

    protected override void OnParametersSet()
    {

        Trabajadores = objetoCASA.DespachoProfesional.Trabajadores;

        StateHasChanged();
    }

    private void EvitarDecimalesPorcentaje(ChangeEventArgs e)
    {
        var input = e?.Value?.ToString();

        if (double.TryParse(input, out var valor))
        {
            itemSeleccionadoTemporal.PorcentajeProduccion = Math.Round(valor, 0, MidpointRounding.AwayFromZero);
        }
    }

    private void EvitarDecimalesTrabajores(ChangeEventArgs e)
    {
        var input = e?.Value?.ToString();

        if (double.TryParse(input, out var valor))
        {
            itemSeleccionadoTemporal.NumTrabajadores = Math.Round(valor, 0, MidpointRounding.AwayFromZero);
        }
    }

    private async Task GestionarDatos(string accion)
    {
        rellenarItem();

        switch (accion)
        {
            case "update":
                objetoCASA.ActualizarTrabajador(itemSeleccionado);

                await cerrarPopupGestionDatos();

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

                break;

            case "create":
                objetoCASA.InsertarTrabajador(itemSeleccionado);
                await cerrarPopupGestionDatos();
                mensajes.Add(new ToastMessage
                    {
                        Type = ToastType.Primary,
                        Message = $"Guardado correctamente.",
                    });
                break;

            case "delete":
                objetoCASA.EliminarTrabajador(itemSeleccionado);
                await cerrarPopupConfirmarBorrado();
                mensajes.Add(new ToastMessage
                    {
                        Type = ToastType.Primary,
                        Message = $"Eliminado correctamente.",
                    });
                break;
        }
        Trabajadores = objetoCASA.DespachoProfesional.Trabajadores.ToList();
        await InvokeAsync(StateHasChanged);
        _Parent.RefreshState();
    }
    private async Task BorrarItem()
    {
        await GestionarDatos("delete");
    }


    private async Task abrirPopupGestionDatos(CASA.Trabajador objeto, bool esNuevo)
    {
        itemSeleccionado = objeto;

        if (esNuevo)
        {
            nuevoElemento = true;
        }
        else
        {
            nuevoElemento = false;
            itemSeleccionadoTemporal = new CASA.Trabajador()

                {
                    CosteAnual = objeto.CosteAnual,
                    CosteAnualTotal = objeto.CosteAnualTotal,
                    HorasProduccion = objeto.HorasProduccion,
                    IdTrabajador = objeto.IdTrabajador,
                    JornadaLaboral = objeto.JornadaLaboral,
                    Nombre = objeto.Nombre,
                    NumTrabajadores = objeto.NumTrabajadores,
                    PorcentajeProduccion = objeto.PorcentajeProduccion
                };
        }

        if (!nuevoElemento)
        {
            tituloPopup = "Modificar grupo de trabajadores";
        }
        else
        {
            itemSeleccionadoTemporal = new CASA.Trabajador();
            tituloPopup = "Nuevo grupo de trabajadores";
            itemSeleccionadoTemporal.Nombre = "Arquitecto";
            itemSeleccionadoTemporal.JornadaLaboral = 40;
            itemSeleccionadoTemporal.PorcentajeProduccion = 80;
            itemSeleccionadoTemporal.NumTrabajadores = 1;
        }

        StateHasChanged();
        await popupGestionDatos.ShowAsync();
    }

    private async Task cerrarPopupGestionDatos()
    {
        await popupGestionDatos.HideAsync();
    }

    //////// PopUp eliminar registro
    private async Task abrirPopupConfirmarBorrado(CASA.Trabajador objeto)
    {
        itemSeleccionado = objeto;
        await popupConfirmarBorrado.ShowAsync();
    }
    private async Task cerrarPopupConfirmarBorrado()
    {
        await popupConfirmarBorrado.HideAsync();
    }

    private void rellenarItem()
    {
        itemSeleccionado.CosteAnual = itemSeleccionadoTemporal.CosteAnual;
        itemSeleccionado.CosteAnualTotal = itemSeleccionadoTemporal.CosteAnualTotal;
            itemSeleccionado.HorasProduccion = itemSeleccionadoTemporal.HorasProduccion;
            itemSeleccionado.IdTrabajador = itemSeleccionadoTemporal.IdTrabajador;
            itemSeleccionado.JornadaLaboral = itemSeleccionadoTemporal.JornadaLaboral;
            itemSeleccionado.Nombre = itemSeleccionadoTemporal.Nombre;
            itemSeleccionado.NumTrabajadores = itemSeleccionadoTemporal.NumTrabajadores;
            itemSeleccionado.PorcentajeProduccion = itemSeleccionadoTemporal.PorcentajeProduccion;
    }
}
