import { getEffectiveCompanyRole } from "@/lib/company-context";

import { AVISO_DE_DADOS, baseDaLoja, falha } from "./comum";
import type { FerramentaDeLeitura } from "./tipos";

const PAPEL: Record<string, string> = {
  owner: "dono",
  admin: "administrador",
  manager: "gerente",
  financial: "financeiro",
  production: "produção",
  sales: "vendas",
  viewer: "consulta",
};

export const verEmpresa: FerramentaDeLeitura = {
  nome: "ver_empresa",
  titulo: "Ver a empresa desta conta",
  descricao:
    "Mostra a empresa desta conta (nome, CNPJ, telefone, WhatsApp, endereço e o link da loja virtual) e quem está usando: a pessoa, o papel dela e o que esta chave pode fazer. Comece por aqui para saber com que empresa você está falando.",
  campos: {},
  tipo: "leitura",
  permissoes: [],
  async executar(ctx) {
    const perfilId = ctx.donoDosDados;
    const [{ data: perfil, error }, { data: dominio }] = await Promise.all([
      ctx.supabase
        .from("profiles")
        .select("id,store_name,slug,cnpj,phone,company_whatsapp,address_street,address_number,address_neighborhood,address_city,address_state,address_zip")
        .eq("id", perfilId)
        .maybeSingle(),
      ctx.supabase.from("profile_custom_domains").select("domain,verified").eq("profile_id", perfilId).maybeSingle(),
    ]);
    if (error) falha("ler os dados da empresa", error);

    const p = (perfil ?? {}) as Record<string, unknown>;
    const dominioProprio = dominio?.verified && dominio.domain ? String(dominio.domain).trim().toLowerCase() : "";
    const loja = dominioProprio ? `https://${dominioProprio}` : p.slug ? `${baseDaLoja(ctx)}/${String(p.slug)}` : null;
    const endereco = [p.address_street, p.address_number, p.address_neighborhood].map((parte) => String(parte ?? "").trim()).filter(Boolean).join(", ");

    return {
      dados: {
        _observacao: AVISO_DE_DADOS,
        empresa: {
          nome: String(p.store_name ?? "") || null,
          cnpj: String(p.cnpj ?? "") || null,
          telefone: String(p.phone ?? "") || null,
          whatsapp: String(p.company_whatsapp ?? "") || null,
          endereco: endereco || null,
          cidade: String(p.address_city ?? "") || null,
          estado: String(p.address_state ?? "") || null,
          cep: String(p.address_zip ?? "") || null,
          loja_virtual: loja,
        },
        quem_esta_usando: {
          email: ctx.user.email ?? null,
          papel: PAPEL[getEffectiveCompanyRole(ctx.empresa, ctx.user.id)] ?? "consulta",
          chave: ctx.chave.nome,
          ligado_por: ctx.chave.origem === "conexao" ? "botão Conectar do assistente" : "chave de acesso",
          esta_chave_pode: ctx.chave.escopos.includes("escrita") ? "consultar, criar e alterar" : "só consultar",
        },
      },
      resumo: "Consultou os dados da empresa",
    };
  },
};
