import { eq, sql } from "drizzle-orm";
import { db } from "./db";
import { configuracion } from "./schema";
import { ACUERDO_VERBAL } from "./contract";

const DEFAULTS: Record<string, string> = {
  acuerdo_monto: String(ACUERDO_VERBAL.montoAcordado),
  acuerdo_desde_periodo: ACUERDO_VERBAL.desdePeriodo,
};

export async function getConfig(clave: string): Promise<string> {
  const row = await db.select({ valor: configuracion.valor })
    .from(configuracion)
    .where(eq(configuracion.clave, clave))
    .limit(1);
  if (row.length > 0) return row[0].valor;
  return DEFAULTS[clave] ?? "";
}

export async function setConfig(clave: string, valor: string): Promise<void> {
  await db.insert(configuracion)
    .values({ clave, valor })
    .onConflictDoUpdate({ target: configuracion.clave, set: { valor, updatedAt: sql`NOW()` } });
}

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