import { db } from "./db";
import { contratos, indicesIpc } from "./schema";
import { getConfig } from "./config";
import { ACUERDO_VERBAL } from "./contract";

export interface CalendarioEntry {
  fechaAjuste: string;
  mesIndiceInicio: string;
  mesIndiceFin: string;
}

export interface ContratoData {
  id: number;
  direccion: string;
  montoBaseInicial: number;
  diaVencimiento: number;
  penalDiario: number;
  fechaInicio: string;
  fechaFin: string;
  calendario: CalendarioEntry[];
}

export async function getContratoData(): Promise<ContratoData> {
  const [row] = await db.select({
    id: contratos.id,
    direccion: contratos.direccion,
    montoBaseInicial: contratos.montoBaseInicial,
    diaVencimiento: contratos.diaVencimiento,
    penalDiario: contratos.penalDiario,
    fechaInicio: contratos.fechaInicio,
    fechaFin: contratos.fechaFin,
    calendarioAjustes: contratos.calendarioAjustes,
  }).from(contratos).limit(1);

  return {
    id: row.id,
    direccion: row.direccion,
    montoBaseInicial: row.montoBaseInicial,
    diaVencimiento: row.diaVencimiento,
    penalDiario: row.penalDiario,
    fechaInicio: row.fechaInicio,
    fechaFin: row.fechaFin,
    calendario: (row.calendarioAjustes as CalendarioEntry[]) ?? [],
  };
}

export async function getIpcData(): Promise<Record<string, number>> {
  const rows = await db.select({
    anio: indicesIpc.anio,
    mes: indicesIpc.mes,
    valor: indicesIpc.valor,
  }).from(indicesIpc);

  const result: Record<string, number> = {};
  for (const row of rows) {
    result[`${row.anio}-${String(row.mes).padStart(2, "0")}`] = row.valor;
  }
  return result;
}

export async function getAcuerdoVerbalFromDb(): Promise<{ monto: number; desdePeriodo: string }> {
  const montoStr = await getConfig("acuerdo_monto");
  const desdePeriodo = await getConfig("acuerdo_desde_periodo");
  return {
    monto: parseInt(montoStr) || ACUERDO_VERBAL.montoAcordado,
    desdePeriodo: desdePeriodo || ACUERDO_VERBAL.desdePeriodo,
  };
}
