@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 objetoLicitacionUrban.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="objetoLicitacionUrban.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="objetoLicitacionUrban.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="objetoLicitacionUrban.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> 
                            @* <NumberInput TValue="double" Min="0" @onchange="cambiarNumero" @bind-Value="context.ValorNecesario" class="inputForm"></NumberInput> *@
                        </div>
                    }
                </GridColumn>
            </GridColumns>
        </Grid>
      <CascadingValue Value="this" IsFixed="false">
            @* <InstrumentosLicitacionesUrban objetoLicitacionUrban="objetoLicitacionUrban"></InstrumentosLicitacionesUrban> *@
            <InstrumentosLicitacionesUrban @ref="componenteInstrumentos" objetoLicitacionUrban="objetoLicitacionUrban" />

        </CascadingValue> 
    </div>

</div>



@code {
    [Parameter]
    public bdHerramientaCACOA.LicitacionesURBAN objetoLicitacionUrban { get; set; } = new LicitacionesURBAN();
    private List<tipoproyectosURBAN> tipoProyectoAux = new List<tipoproyectosURBAN>();

    private InstrumentosLicitacionesUrban componenteInstrumentos;

    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 HerramientaCASA.Components.Pages.LicitacionesURBAN _Parent { get; set; }


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

            cambiarListasDocumentacion();
            itemSeleccionado.idInstrumento = objetoLicitacionUrban.TrabajoProfesional.idInstrumento;
            await InvokeAsync(StateHasChanged);
            RefreshState();

        }
    }


    private async void cambiarNumero()
    {
        componenteInstrumentos?.Recargar();
        await InvokeAsync(StateHasChanged);
        RefreshState();
    }
    private async 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);
                    objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion = itemSeleccionado.idTipoDocumentacion;
                    cambiarSelectDocumentos();
                    calcularHoraTrabajo();
                }
                else
                {
                    itemSeleccionado.idTipoDocumentacion = 0;
                    objetoLicitacionUrban.TrabajoProfesional.idTipoDocumentacion = itemSeleccionado.idTipoDocumentacion;
                }

                break;
            case nameof(itemSeleccionado.idTipoProyecto):

                if (!string.IsNullOrEmpty(value))
                {

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

                break;
        }
        await InvokeAsync(StateHasChanged);
        RefreshState();

    }


    private async void calcularHoraTrabajo()
    {
        foreach (var datos in objetoLicitacionUrban.TrabajoProfesional.DatosNecesarios.ToList())
        {
            objetoLicitacionUrban.ActualizarDatoNecesario(datos);
        }

        await InvokeAsync(StateHasChanged);
        RefreshState();
    }

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

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

        cambiarListasDocumentacion();

        await InvokeAsync(StateHasChanged);
        RefreshState();

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

    private async void opcionalCambiado(bool e, URBAN.DocumentacionURBAN objeto)
    {
        objeto.Checkeada = e;
        objetoLicitacionUrban.ActualizarDocumentacionOpcional(objeto);
        await InvokeAsync(StateHasChanged);
        await InvokeAsync(StateHasChanged);
        RefreshState();

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

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


    public void RefreshState()
    {
        _Parent.RefreshState();
        this.StateHasChanged();
    }
}
