import { EstadoSuscripcion } from 'src/suscripciones/dto/enum-sucripcion';

type ModuleAccessDb = {
  suscripciones: {
    findFirst: (args: Record<string, unknown>) => Promise<{ id: string } | null>;
  };
  suscripcion_modulos: {
    findFirst: (args: Record<string, unknown>) => Promise<{ id: string } | null>;
  };
};

export async function isModuleEnabledForEmpresa(
  db: ModuleAccessDb,
  empresaId: string,
  moduloCodigo: string,
): Promise<boolean> {
  const suscripcion = await db.suscripciones.findFirst({
    where: {
      empresa_id: empresaId,
      estado: {
        in: [EstadoSuscripcion.Activo, EstadoSuscripcion.EnGracia, EstadoSuscripcion.Pausado],
      },
    },
    orderBy: { created_at: 'desc' },
    select: { id: true },
  });

  if (!suscripcion) {
    return false;
  }

  const modulo = await db.suscripcion_modulos.findFirst({
    where: {
      suscripcion_id: suscripcion.id,
      activo: true,
      modulos: {
        active: true,
        codigo: moduloCodigo,
      },
    },
    select: { id: true },
  });

  return Boolean(modulo);
}

export async function isContabilidadEnabledForEmpresa(
  db: ModuleAccessDb,
  empresaId: string,
): Promise<boolean> {
  return isModuleEnabledForEmpresa(db, empresaId, 'CONTABILIDAD');
}
