@using bdHerramientaCACOA.HerramientaURBAN
@using bdHerramientaCACOA.HerramientaUrban
@using bdHerramientaCACOA.db
@using static bdHerramientaCACOA.HerramientaURBAN.URBAN




<div class="row">
    <div class="col-6 formatoCampos pt-2">
        <label class="tituloLbl">Tipo de Documento:</label>
        <InputSelect @bind-Value="@itemSeleccionado.idTipoDocumentacion" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(itemSeleccionado.idTipoDocumentacion))">
            @foreach (var grupoTipologia in objetoURBAN.Enumerados.TiposDeDocumentos)
            {
                <option value="@grupoTipologia.idEnumeracion">@grupoTipologia.ValorAlfabetico1</option>
            }
        </InputSelect>
    </div>
    <div class="col-6 formatoCampos pt-2">
        <label class="tituloLbl">Documento:</label>
        <InputSelect @bind-Value="@itemSeleccionado.idTipoProyecto" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(itemSeleccionado.idTipoProyecto))">
            @foreach (var tipoProy in tipoProyectoAux)
            {
                <option value="@tipoProy.idtipoproyectos">@tipoProy.Descripcion</option>
            }
        </InputSelect>
    </div>
</div>

<div class="row mt-3">
    <div class="col-4">
        <label class="tituloLbl">Documentación Mínima:</label>
        <Grid TItem="URBAN.DocumentacionURBAN"
        Class="tablaCACOA table"
        Data="objetoURBAN.TrabajoProfesional.DocumentacionMinima"
        AllowFiltering="false"
        PageSize="10"
        Height="100"
        EmptyText="No hay registros."
        PageSizeSelectorVisible="false"
        Responsive="true">

            <GridColumns>
                <GridColumn TItem="URBAN.DocumentacionURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción" PropertyName="Documentacion">
                    @context.Descripcion
                </GridColumn>
            </GridColumns>
        </Grid>
    </div>
    <div class="col-4">
        <label class="tituloLbl">Documentación Opcional:</label>
        <Grid TItem="URBAN.DocumentacionURBAN"
        Class="tablaCACOA table"
        Data="objetoURBAN.TrabajoProfesional.DocumentacionOpcional"
        AllowFiltering="false"
        PageSize="10"
        Height="100"
        EmptyText="No hay registros."
        PageSizeSelectorVisible="false"
        Responsive="true">

            <GridColumns>
                <GridColumn TItem="URBAN.DocumentacionURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción" PropertyName="Documencación" Class="colorA">
                    @context.Descripcion
                </GridColumn>
                <GridColumn TItem="URBAN.DocumentacionURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Añadida">
                    <div class="d-flex justify-content-center checkTabla">
                        <CheckboxInput Class="align-content-center checkGordo" Value=@context.Checkeada TValue="double" ValueExpression="() => context.Checkeada" ValueChanged="(value) => opcionalCambiado(value,context)"></CheckboxInput>
                    </div>
                </GridColumn>
            </GridColumns>

        </Grid>
    </div>
    <div class="col-4">
        <label class="tituloLbl">Datos Necesarios:</label>
        <Grid TItem="URBAN.DocumentacionURBAN"
        Class="tablaCACOA table"
        Data="objetoURBAN.TrabajoProfesional.DatosNecesarios"
        AllowFiltering="false"
        PageSize="10"
        Height="100"
        EmptyText="No hay registros."
        PageSizeSelectorVisible="false"
        Responsive="true">
            <GridColumns>
                <GridColumn TItem="URBAN.DocumentacionURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Descripción" PropertyName="Documencación" Class="colorA">
                    @context.Descripcion
                </GridColumn>
                <GridColumn TItem="URBAN.DocumentacionURBAN" HeaderTextAlignment="Alignment.Center" HeaderText="Valor">
                    @if (context.esCheckbox)
                    {
                        <div class="d-flex justify-content-center checkTabla">
                            <CheckboxInput Class="align-content-center checkGordo" Value=@context.Checkeada TValue="double" ValueExpression="() => context.Checkeada" ValueChanged="(value) => DatoNecesarioCheckeado(value,context)"></CheckboxInput>
                        </div>
                    }
                    else
                    {
                        <div class="d-flex">
                            <InputNumber Min="0" class="inputForm inputTabla tdAlineadoDerecha pe-0 me-1" Value=@context.ValorNecesario TValue="double" ValueExpression="() => context.ValorNecesario" ValueChanged="(value) => DatoNecesarioCambiado(value,context)"></InputNumber>
                        </div>
                    }
                </GridColumn>
            </GridColumns>
        </Grid>
    </div> 
</div>



@code {
    [Parameter]
    public URBAN objetoURBAN { get; set; } = new URBAN();
    private List<tipoproyectosURBAN> tipoProyectoAux = new List<tipoproyectosURBAN>();


    private URBANTrabajoProfesional itemSeleccionado = new URBANTrabajoProfesional();

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


    protected override async Task OnInitializedAsync()
    {
        if (objetoURBAN.TrabajoProfesional.idTipoDocumentacion != 0)
        {
            itemSeleccionado.idTipoProyecto = objetoURBAN.TrabajoProfesional.idTipoProyecto;
            itemSeleccionado.idTipoDocumentacion = objetoURBAN.TrabajoProfesional.idTipoDocumentacion;
            cambiarSelectDocumentos();

        //    cambiarListasDocumentacion();
            objetoURBAN.ObtenerHoraTipoDocumento();
            itemSeleccionado.idInstrumento = objetoURBAN.TrabajoProfesional.idInstrumento;
        }
    }

    private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
    {
        var value = e.Value?.ToString();
        var field = new FieldIdentifier(itemSeleccionado, fieldName);

        switch (fieldName)
        {
            case nameof(itemSeleccionado.idTipoDocumentacion):

                if (!string.IsNullOrEmpty(value))
                {

                    itemSeleccionado.idTipoDocumentacion = int.Parse(value);
                    objetoURBAN.TrabajoProfesional.idTipoDocumentacion = itemSeleccionado.idTipoDocumentacion;
                    cambiarSelectDocumentos();
                    cambiarListasDocumentacion();

                    calcularHoraTrabajo();
                }
                else
                {
                    itemSeleccionado.idTipoDocumentacion = 0;
                    objetoURBAN.TrabajoProfesional.idTipoDocumentacion = itemSeleccionado.idTipoDocumentacion;
                }

                break;
            case nameof(itemSeleccionado.idTipoProyecto):

                if (!string.IsNullOrEmpty(value))
                {

                    itemSeleccionado.idTipoProyecto = int.Parse(value);
                    objetoURBAN.TrabajoProfesional.idTipoProyecto = itemSeleccionado.idTipoProyecto;
                    cambiarListasDocumentacion();
                    calcularHoraTrabajo();
                }
                else
                {
                    itemSeleccionado.idTipoProyecto = 0;
                    objetoURBAN.TrabajoProfesional.idTipoProyecto = itemSeleccionado.idTipoProyecto;
                }

                break;
        }

    }


    private void calcularHoraTrabajo()
    {

        foreach (var datos in objetoURBAN.TrabajoProfesional.DatosNecesarios.ToList())
        {
                objetoURBAN.ActualizarDatoNecesario(datos);
        }

        _Parent.RefreshState();
    }

    private async Task cambiarSelectDocumentos()
    {
        tipoProyectoAux = objetoURBAN.Enumerados.ProyectosPorTipo(itemSeleccionado.idTipoDocumentacion);

        if (itemSeleccionado.idTipoProyecto == 0)
        {
            objetoURBAN.TrabajoProfesional.idTipoProyecto = tipoProyectoAux.First().idtipoproyectos;
        }
        else
        {
            if (tipoProyectoAux.Any(x => x.idtipoproyectos == itemSeleccionado.idTipoProyecto))
            {
                objetoURBAN.TrabajoProfesional.idTipoProyecto = itemSeleccionado.idTipoProyecto;
            }
            else
            {
                objetoURBAN.TrabajoProfesional.idTipoProyecto = tipoProyectoAux.First().idtipoproyectos;
            }
        }


        await InvokeAsync(StateHasChanged);
        _Parent.RefreshState();
    }
    private async Task cambiarListasDocumentacion()
    {
        objetoURBAN.TrabajoProfesional.DocumentacionMinima = objetoURBAN.DocumentacionMinima(objetoURBAN.TrabajoProfesional.idTipoProyecto);
        objetoURBAN.TrabajoProfesional.DocumentacionOpcional = objetoURBAN.DocumentacionOpcional(objetoURBAN.TrabajoProfesional.idTipoProyecto);
        objetoURBAN.TrabajoProfesional.DatosNecesarios = objetoURBAN.DatosNecesarios(objetoURBAN.TrabajoProfesional.idTipoProyecto);
        objetoURBAN.ObtenerHoraTipoDocumento();
        //await InvokeAsync(StateHasChanged);
    }

    private async void opcionalCambiado(bool e, URBAN.DocumentacionURBAN objeto)
    {

        objeto.Checkeada = e;
        objetoURBAN.ActualizarDocumentacionOpcional(objeto);
        await InvokeAsync(StateHasChanged);
        _Parent.RefreshState();
    }
    private async void DatoNecesarioCheckeado(bool e, URBAN.DocumentacionURBAN objeto)
    {
        objeto.Checkeada = e;
        objetoURBAN.ActualizarDatoNecesario(objeto);
        await InvokeAsync(StateHasChanged);
        _Parent.RefreshState();
    }
    private async void DatoNecesarioCambiado(double e, URBAN.DocumentacionURBAN objeto)
    {
        objeto.ValorNecesario = (double)e;
        objetoURBAN.ActualizarDatoNecesario(objeto);

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