import { eq } from 'drizzle-orm'; import { db } from './index'; import { pricingConfig, catalogItems, tenants } from './schema'; import type { PricingConfig, CatalogItem, ManoObraKey } from '@/budget/types'; import { getCurrentTenantId as getTenantId } from '@/lib/auth/current-user'; export type EnvioMode = (typeof tenants.envioPresupuesto.enumValues)[number]; export async function getEnvioModeFor(tenantId: string): Promise { const [row] = await db .select({ modo: tenants.envioPresupuesto }) .from(tenants) .where(eq(tenants.id, tenantId)) .limit(1); return row?.modo ?? 'automatico'; } export async function getEnvioMode(): Promise { return getEnvioModeFor(await getTenantId()); } const MANO_OBRA_DEFAULT: Record = { demolicion: 0, impermeabilizacion: 0, fontaneria: 0, electricidad: 0, mano_de_obra: 0, }; const EXTRAS_DEFAULT = { tuberias: 0, boletin: 0, distribucion: 0 }; export async function getPricingConfigFor(tenantId: string): Promise { 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 }, extras: { ...EXTRAS_DEFAULT }, baremoMinimo: null, }; } return { alturaTechoDefault: row.alturaTechoDefault, factorZona: row.factorZona, manoObra: { ...MANO_OBRA_DEFAULT, ...(row.manoObra as Record) }, extras: { ...EXTRAS_DEFAULT, ...(row.extras ?? {}) }, baremoMinimo: row.baremoMinimo ?? null, }; } export async function getPricingConfig(): Promise { return getPricingConfigFor(await getTenantId()); } export async function getCatalogFor(tenantId: string): Promise { 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 async function getCatalog(): Promise { return getCatalogFor(await getTenantId()); } export { getTenantId };