-- Schema do funil "Do Post ao Lucro" — Supabase / Postgres
-- Rode no SQL Editor do Supabase antes de ativar os workflows.

create extension if not exists "pgcrypto";

create table if not exists leads_funil (
  id                  uuid primary key default gen_random_uuid(),
  criado_em           timestamptz not null default now(),
  atualizado_em       timestamptz not null default now(),
  nome                text,
  contato             text unique,          -- id do Instagram ou telefone (chave de deduplicação)
  canal               text,                 -- instagram | whatsapp
  origem_tipo         text,                 -- post_proprio | parceiro
  origem_ref          text,                 -- id do post ou nome do parceiro
  intencao            text,                 -- palavra-chave detectada
  status              text not null default 'novo',
                      -- novo | aguardando_consentimento | consentido | qualificado
                      -- | em_followup | convertido | perdido | opt_out
  consentimento_lgpd  boolean not null default false,
  consentimento_em    timestamptz,
  tem_prescricao      boolean,
  followup_etapa      int not null default 0,   -- 0=nenhum, 1=D+0 enviado, 2=D+1 enviado, 3=toque 3 enviado
  ultimo_toque        timestamptz,
  respondeu           boolean not null default false,
  valor_venda         numeric(12,2),
  convertido_em       timestamptz
);

create index if not exists idx_leads_status  on leads_funil (status);
create index if not exists idx_leads_contato on leads_funil (contato);
create index if not exists idx_leads_origem  on leads_funil (origem_tipo, origem_ref);

-- Views úteis --------------------------------------------------------
-- Receita atribuída por origem (post/parceiro)
create or replace view v_receita_por_origem as
select origem_tipo, origem_ref,
       count(*) filter (where status='convertido')      as vendas,
       coalesce(sum(valor_venda),0)                      as receita
from leads_funil
group by origem_tipo, origem_ref
order by receita desc;

-- Funil (contagem por status)
create or replace view v_funil as
select status, count(*) as leads
from leads_funil
group by status;
