import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

export interface EstadoImportacion {
  planilla_cargada: boolean;
  histor_cargada: boolean;
  planilla_nombre: string | null;
  histor_nombre: string | null;
  ultima_sync: string | null;
}

export interface RespuestaImportacion {
  ok: boolean;
  mensaje: string;
  stdout?: string;
  stderr?: string;
  detalle?: any;
}

export interface HistGeneralEspecialidad {
  especialidad: string;
  esperado: number;
  asistidas: number;
  pendientes: number;
  porcentaje: number;
}

export interface HistGeneralMesPrograma {
  mes: number;
  esperado: number;
  asistidas: number;
}

export interface HistogramaGeneral {
  pacientes_incluidos: number;
  rango: { inicio: string | null; hoy: string };
  total_esperado: number;
  total_asistidas: number;
  porcentaje: number;
  porEspecialidad: HistGeneralEspecialidad[];
  porMesPrograma: HistGeneralMesPrograma[];
}

export interface HistPacienteMes {
  mes: number;
  inicio: string;
  fin: string;
  esperado: number;
  asistidas: number;
  pendientes: number;
}

export interface HistogramaPaciente {
  numero_documento: string;
  ingreso: { fecha: string; fuente: string };
  ventana: { inicio: string; fin: string; mes_programa: number };
  cumplimiento: {
    esperado_mes_actual: number;
    asistidas_mes_actual: number;
    porcentaje_mes_actual: number;
    esperado_hasta_hoy: number;
    asistidas_hasta_hoy: number;
    porcentaje_hasta_hoy: number;
  };
  porMes: HistPacienteMes[];
}

@Injectable({ providedIn: 'root' })
export class ImportacionService {
  private baseUrl = 'http://localhost:2800';

  constructor(private http: HttpClient) {}

  estado(): Observable<EstadoImportacion> {
    return this.http.get<EstadoImportacion>(`${this.baseUrl}/api/importacion/estado`);
  }

  subirPlanilla(file: File): Observable<RespuestaImportacion> {
    const form = new FormData();
    form.append('file', file);
    return this.http.post<RespuestaImportacion>(`${this.baseUrl}/api/importacion/planilla`, form);
  }

  subirHistor(file: File): Observable<RespuestaImportacion> {
    const form = new FormData();
    form.append('file', file);
    return this.http.post<RespuestaImportacion>(`${this.baseUrl}/api/importacion/histor`, form);
  }

  histogramaGeneral(): Observable<HistogramaGeneral> {
    return this.http.get<HistogramaGeneral>(`${this.baseUrl}/api/histogramas/general`);
  }

  histogramaPaciente(numeroDocumento: string): Observable<HistogramaPaciente> {
    return this.http.get<HistogramaPaciente>(`${this.baseUrl}/api/histogramas/paciente/${numeroDocumento}`);
  }
}
