@using HerramientaCASA.Components.Pages.HerramientaCASATabs.DespachoProfesionalComponents
@using HerramientaCASA.Model
@using Microsoft.EntityFrameworkCore
@using bdHerramientaCACOA
@using bdHerramientaCACOA.HerramientaURBAN
@using bdHerramientaCACOA.db
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedSessionStorage ProtectedSessionStore
@inject NavigationManager Navigation
@inject UserState UserState


@if (listadoSimulaciones.Count > 0)
{
    <Modal @ref="popupGestionDatos" title="Copiar Despacho de otra Simulación" IsVerticallyCentered="false" UseStaticBackdrop="true" CloseOnEscape="false">
        <BodyTemplate>
            <div class="row">
                <p>
                    Esta opción le permite copiar <b>sólo los datos de la pestaña despacho profesional</b> de una simulacion existente.
                </p>
                <p>
                    <b>Se reemplazarán los datos</b> del despacho profesional <b>de la simulación actual</b>.<br />Los cambios no se almacenarán hasta que pulse en el botón Guardar/Modificar.
                </p>
            </div>
            <div class="row mt-2 mb-3">

                <div class="col-12 formatoCampos">
                    <label class="tituloLbl mb-2">¿De que simulación desea obtener los datos?</label>
                    <InputSelect @bind-Value="@idFicheroObtenido" class="inputForm selectTabla">
                        @foreach (var simulacion in listadoSimulaciones)
                        {
                            <option value="@simulacion.idFicheroJSON">@simulacion.Descripcion</option>
                        }
                    </InputSelect>
                </div>
            </div>
        </BodyTemplate>
        <FooterTemplate>
            <Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
            <Button @onclick="clonarDespacho" Color="ButtonColor.Primary">Copiar Despacho</Button>
        </FooterTemplate>
    </Modal>


    <div>
        <div>
            <button @onclick="@(() => abrirPopupGestionDatos())" class="btnBlue ms-auto" style="background-color: #65b7c3 !important;"><i class="fas fa-file-import me-2"></i> Copiar despacho de otra simulación</button>
        </div>
    </div>
}


@code {
    [Parameter]
    public ClonarDespachoVM datosDespachoClonado { get; set; } = new ClonarDespachoVM();

    [CascadingParameter]
    public HerramientaCASA.Components.Pages.HerramientaCASATabs.DespachoProfesional _Parent { get; set; }


    // CAMBIAR POR LA OTRA PAGINA QUE LLAMA A CLONAR DESPACHO Y CAMBIAR ABAJO EN LA FUNCION
    [CascadingParameter]
    public HerramientaCASA.Components.Pages.HerramientaURBANTabs.DespachoProfesionalURBAN _OtroParent { get; set; }

    private List<simulaciones> listadoSimulaciones = new List<simulaciones>();
    private int idFicheroObtenido;
    private Modal popupGestionDatos = default!;

    public tsHerramientasCACOA bd;

    protected override async Task OnInitializedAsync()
    {
        bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);

        cargarListaSimulaciones();

        idFicheroObtenido = listadoSimulaciones.Count > 0 ? listadoSimulaciones.First().idFicheroJSON : 0;
    }

    private async void cargarListaSimulaciones()
    {

        var idUser = await ProtectedSessionStore.GetAsync<int>("idUsuario");

        listadoSimulaciones = bd.simulaciones.Include(x => x.idTipoSimulacionNavigation).Where(x => x.idCodigo == idUser.Value && (x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA.CASA" || x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA.URBAND") && x.idSimulacion != datosDespachoClonado.idSimulacion).ToList();

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

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

    private void clonarDespacho()
    {
        if (_Parent != null)
        {
            var byteFichero = bd.ficheros.First(x => x.idFichero == idFicheroObtenido).Fichero;

            string CASAJson = System.Text.Encoding.UTF8.GetString(byteFichero);

            var casaCopiada = System.Text.Json.JsonSerializer.Deserialize<CASA>(CASAJson);

            datosDespachoClonado.despachoProf.Trabajadores = casaCopiada.DespachoProfesional.Trabajadores;
            datosDespachoClonado.despachoProf.CostesIndirectos = casaCopiada.DespachoProfesional.CostesIndirectos;
            datosDespachoClonado.despachoProf.CostesPersonal = casaCopiada.DespachoProfesional.CostesPersonal;

            refrescarPadre();
            StateHasChanged();
            cerrarPopupGestionDatos();
            // Navigation.NavigateTo("/HerramientaCASAS?idClonado=" + tsUtilidades.crypt.FEncS(idFicheroObtenido.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649), true);

        }
        else if (_OtroParent != null)
        {

            var byteFichero = bd.ficheros.First(x => x.idFichero == idFicheroObtenido).Fichero;

            string CASAURBANJson = System.Text.Encoding.UTF8.GetString(byteFichero);

            var casaCopiada = System.Text.Json.JsonSerializer.Deserialize<URBAN>(CASAURBANJson);

            datosDespachoClonado.despachoProf.Trabajadores = casaCopiada.DespachoProfesional.Trabajadores;
            datosDespachoClonado.despachoProf.CostesIndirectos = casaCopiada.DespachoProfesional.CostesIndirectos;
            datosDespachoClonado.despachoProf.CostesPersonal = casaCopiada.DespachoProfesional.CostesPersonal;


            refrescarPadre();
            StateHasChanged();
            cerrarPopupGestionDatos();
        }
    }


    private void refrescarPadre()
    {
        if (_Parent != null)
        {
            _Parent.hacerCalculos();
            _Parent.RefreshState();
        }
        else if (_OtroParent != null)
        {
            _OtroParent.hacerCalculos();
            _OtroParent.RefreshState();
        }
    }
}
