@page "/tickets/ticketform/{TicketId}"
@page "/tickets/ticketform"
@inject HttpClient _httpClient
@inject NavigationManager Navigation
@inject IToastService toastService
@inject AuthenticationStateProvider authenticationStateProvider

<EditForm Model="@ticket" OnValidSubmit="@HandleValidSubmit">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <div class="row">
        <div class="col-sm-4">
            <div class="form-group">
                <label for="Titulo">Título:</label>
                <InputText id="Titulo" @bind-Value="ticket.Titulo" class="form-control" />
            </div>
        </div>
        <div class="col-sm-2">
            <div class="form-group">
                <label for="AsignadoAUsuarioId">Asignado a:</label>
                <InputText id="AsignadoAUsuarioId" @bind-Value="ticket.AsignadoAUsuarioId" class="form-control" />
            </div>
        </div>
        <div class="col-sm-3">
            <div class="form-group">
                <label for="Categoria">Categoría:</label>
                <InputText id="Categoria" @bind-Value="ticket.Categoria" class="form-control" />
            </div>
        </div>
        <div class="col-sm-3">
            <div class="form-group">
                <label for="Departamento">Departamento:</label>
                <InputText id="Departamento" @bind-Value="ticket.Departamento" class="form-control" />
            </div>
        </div>

    </div>
    <div class="row">
        <div class="col-sm-2">
            <div class="form-group">
                <label for="Prioridad">Prioridad:</label>
                <InputSelect id="Prioridad" @bind-Value="ticket.Prioridad" class="form-control">
                    @foreach (var option in prioridadOptions)
                    {
                        <option value="@option">@option</option>
                    }
                </InputSelect>
            </div>
        </div>
        <div class="col-sm-2">
            <div class="form-group">
                <label for="Estado">Estado:</label>
                <InputSelect id="Estado" @bind-Value="ticket.Estado" class="form-control">
                    @foreach (var option in estadoOptions)
                    {
                        <option value="@option">@option</option>
                    }
                </InputSelect>
            </div>
        </div>
        <div class="col-sm-2">
            <div class="form-group">
                <label for="FechaEjecucion">Fecha Ejecución:</label>
                <InputDate id="FechaEjecucion" @bind-Value="ticket.FechaEjecucion" class="form-control" />
            </div>
        </div>
        <div class="col-sm-3">
            <div class="form-group">
                <label for="Impacto">Impacto:</label>
                <InputSelect id="Impacto" @bind-Value="ticket.Impacto" class="form-control">
                    @foreach (var option in impactoOptions)
                    {
                        <option value="@option">@option</option>
                    }
                </InputSelect>
            </div>
        </div>
        <div class="col-sm-3">
            <div class="form-group">
                <label for="Urgencia">Urgencia:</label>
                <InputSelect id="Urgencia" @bind-Value="ticket.Urgencia" class="form-control">
                    @foreach (var option in urgenciaOptions)
                    {
                        <option value="@option">@option</option>
                    }
                </InputSelect>
            </div>
        </div>

    </div>
    <div class="row">
        <div class="col-sm-4">
            <div class="form-group">
                <label for="Descripcion">Descripción:</label>
                <InputTextArea id="Descripcion" @bind-Value="ticket.Descripcion" class="form-control" />
            </div>
        </div>
        <div class="col-sm-5">
            <div class="form-group">
                <label for="Comentarios">Comentarios:</label>
                <InputTextArea id="Comentarios" @bind-Value="ticket.Comentarios" class="form-control" />
            </div>
        </div>
        <div class="col-sm-3">
            <div class="form-group">
                <br />
                <div class="form-check">
                    <InputCheckbox id="EsSolicitudCliente" @bind-Value="ticket.EsSolicitudCliente" />
                    <label class="form-check-label" for="EsSolicitudCliente">¿Es solicitud de cliente?:</label>
                </div>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-sm-4">
            <div class="form-group">
                <label for="AdjuntoArchivo">Adjunto Archivo:</label>
                <InputFile id="AdjuntoArchivo" OnChange="FileUploaded" @bind-Value="ticket.AdjuntoArchivo" class="form-control" />
            </div>
        </div>
    </div>
    <br />
    <div class="row">
        <div class="col">
            <button type="submit" class="btn btn-primary">Guardar</button>
            <button type="button" class="btn btn-secondary" @onclick="Cancel">Volver</button>
        </div>
    </div>
</EditForm>
<br/>

@code {
    private ETicket ticket { get; set; } = new ETicket();
    // private string? userName;
    public string Title { get; set; } = string.Empty;
    private string urlReturn = "/dashboardpanel";
    [Parameter]
    public Guid? TicketId { get; set; }

    private List<string> prioridadOptions = new List<string> { "Alta", "Media", "Baja" };
    private List<string> estadoOptions = new List<string> { "En Proceso", "Completado", "Pendiente", "Cancelado" };
    private List<string> impactoOptions = new List<string> { "Alto", "Medio", "Bajo" };
    private List<string> urgenciaOptions = new List<string> { "Alta", "Media", "Baja" };
    //const int MAX_FILESIZE = 5000 * 1024; // 2 MB

    public Task FileUploaded(InputFileChangeEventArgs e)
    {
        var browserFile = e.File;

        if (browserFile != null)
        {
            ticket.AdjuntoArchivo= browserFile.Name;
        }
        return Task.CompletedTask;
    }

    protected override void OnInitialized()
    {
        if (TicketId.HasValue)
        {
            // Cargar datos del ticket existente si estás en modo edición
            // (puedes implementar esta lógica según tu estructura)
            ticket = GetTicketById(TicketId.Value);
        // }
        // else
        // {
        //     // Crear un nuevo ticket si estás en modo nuevo
        //     ticket = new ETicket();
        }

    }

    private async Task HandleValidSubmit()
    {
        try
        {
            // Lógica para registro de ticket
            if (ticket.TicketId == Guid.Empty)
            {
                var authState = await authenticationStateProvider.GetAuthenticationStateAsync();
                var user = authState.User;

                if (user?.Identity?.IsAuthenticated == true)
                {
                    ticket.CreadorUsuarioId = user.Identity.Name ?? string.Empty; // Si Name es null, asignar cadena vacía
                }
                // var user = authState.User;

                // if (user.Identity.IsAuthenticated)
                // {
                //     ticket.CreadorUsuarioId = user.Identity.Name;
                // }

                // Lógica para guardar un nuevo ticket
                var response = await _httpClient.PostAsJsonAsync("/api/Ticket/InsertTicket", ticket);

                if (response.IsSuccessStatusCode)
                {
                    toastService.ShowSuccess("Ticket guardado exitosamente");
                    Navigation.NavigateTo(urlReturn);
                }
                else
                {
                    var jsonResponse = await response.Content.ReadAsStringAsync();
                    toastService.ShowError(jsonResponse);
                }
            }
            else
            {
                // Lógica para actualizar un ticket existente
            }
        }
        catch (HttpRequestException ex)
        {
            // Manejo de errores de la solicitud HTTP
            toastService.ShowError($"Error al realizar la solicitud HTTP: {ex.Message}");
        }
        catch (Exception ex)
        {
            // Manejo de errores generales
            toastService.ShowError($"Error: {ex.Message}");
        }
    }

    // Método para obtener un ticket por su ID (puedes implementarlo según tu estructura)
    private ETicket GetTicketById(Guid ticketId)
    {
        // Lógica para obtener datos del ticket por su ID
        // (esto podría ser una llamada a tu API o una consulta a la base de datos)
        return new ETicket(); // Reemplaza esto con la lógica real
    }
    public void Cancel()
    {
        Navigation.NavigateTo(urlReturn);
    }
}