import { eq } from 'drizzle-orm';
import { db } from './index';
import { pricingConfig, catalogItems } from './schema';
import type { PricingConfig, CatalogItem, ManoObraKey } from '@/budget/types';
import { getCurrentTenantId as getTenantId } from '@/lib/auth/current-user';

const MANO_OBRA_DEFAULT: Record<ManoObraKey, number> = {
  demolicion: 0,
  fontaneria: 0,
  electricidad: 0,
  mano_de_obra: 0,
};

export async function getPricingConfig(): Promise<PricingConfig> {
  const tenantId = await getTenantId();
  const [row] = await db
    .select()
    .from(pricingConfig)
    .where(eq(pricingConfig.tenantId, tenantId))
    .limit(1);

  if (!row) {
    return { alturaTechoDefault: 2.5, factorZona: {}, manoObra: { ...MANO_OBRA_DEFAULT } };
  }
  return {
    alturaTechoDefault: row.alturaTechoDefault,
    factorZona: row.factorZona,
    manoObra: { ...MANO_OBRA_DEFAULT, ...(row.manoObra as Record<ManoObraKey, number>) },
  };
}

export async function getCatalog(): Promise<CatalogItem[]> {
  const tenantId = await getTenantId();
  const rows = await db.select().from(catalogItems).where(eq(catalogItems.tenantId, tenantId));
  return rows.map((r) => ({
    id: r.id,
    categoria: r.categoria,
    nombre: r.nombre,
    calidad: r.calidad,
    precioUnit: r.precioUnit,
    unidad: r.unidad,
    descriptorRender: r.descriptorRender,
    esDefault: r.esDefault,
    sku: r.sku,
  }));
}

export { getTenantId };
