-- ==========================================================================
-- Agência PSI — Migração: novos campos em `patients`
-- ==========================================================================
-- Arquivo: supabase/migrations/20260328000002_patients_new_columns.sql
-- Criado por: Leonardo Nohama · 2026 · São Carlos/SP
--
-- Adiciona as colunas identificadas na engenharia reversa da tela de detalhe
-- (PatientsDetailPage) que ainda não existiam na tabela `patients`.
--
-- Também ajusta os CHECK constraints de `status` e `patient_scope` para
-- aceitar os valores usados no novo formulário de cadastro.
-- ==========================================================================

-- --------------------------------------------------------------------------
-- 1. Colunas novas
-- --------------------------------------------------------------------------

-- Identidade
ALTER TABLE public.patients
  ADD COLUMN IF NOT EXISTS pronomes    text,
  ADD COLUMN IF NOT EXISTS nome_social text,
  ADD COLUMN IF NOT EXISTS etnia       text;

-- Contato
ALTER TABLE public.patients
  ADD COLUMN IF NOT EXISTS canal_preferido  text,
  ADD COLUMN IF NOT EXISTS horario_contato  text;

-- Clínico / convênio
-- convenio: nome de exibição (badge azul no header)
-- convenio_id: FK para insurance_plans (opcional — permite vincular ao cadastro)
ALTER TABLE public.patients
  ADD COLUMN IF NOT EXISTS convenio    text,
  ADD COLUMN IF NOT EXISTS convenio_id uuid REFERENCES public.insurance_plans(id) ON DELETE SET NULL;

-- Origem
ALTER TABLE public.patients
  ADD COLUMN IF NOT EXISTS metodo_pagamento_preferido text,
  ADD COLUMN IF NOT EXISTS motivo_saida               text;

-- --------------------------------------------------------------------------
-- 2. Ajuste do CHECK constraint de `status`
--    Valores originais: Ativo | Inativo | Alta | Encaminhado | Arquivado
--    Valores novos:     + Em espera
-- --------------------------------------------------------------------------
ALTER TABLE public.patients
  DROP CONSTRAINT IF EXISTS patients_status_check;

ALTER TABLE public.patients
  ADD CONSTRAINT patients_status_check CHECK (
    status = ANY (ARRAY[
      'Ativo'::text,
      'Em espera'::text,
      'Inativo'::text,
      'Alta'::text,
      'Encaminhado'::text,
      'Arquivado'::text
    ])
  );

-- --------------------------------------------------------------------------
-- 3. Ajuste do CHECK constraint de `patient_scope`
--    Valores originais: clinic | therapist  (valores técnicos internos)
--    Valores novos:     + Clínica | Particular | Online | Híbrido
--    Estratégia: remover o constraint restritivo e deixar livre (text),
--    pois o controle já é feito no frontend via Select com opções fixas.
-- --------------------------------------------------------------------------
ALTER TABLE public.patients
  DROP CONSTRAINT IF EXISTS patients_patient_scope_check;

-- Também remove a constraint de consistência que dependia do scope antigo
ALTER TABLE public.patients
  DROP CONSTRAINT IF EXISTS patients_therapist_scope_consistency;

-- --------------------------------------------------------------------------
-- 4. Índices de performance
-- --------------------------------------------------------------------------
CREATE INDEX IF NOT EXISTS patients_convenio_id_idx
  ON public.patients USING btree (convenio_id);

CREATE INDEX IF NOT EXISTS patients_pronomes_idx
  ON public.patients USING btree (pronomes);

CREATE INDEX IF NOT EXISTS patients_etnia_idx
  ON public.patients USING btree (etnia);

-- --------------------------------------------------------------------------
-- 5. Comentários
-- --------------------------------------------------------------------------
COMMENT ON COLUMN public.patients.pronomes
  IS 'Pronomes de tratamento. Ex: ela/dela, ele/dele. Exibido no header do perfil.';

COMMENT ON COLUMN public.patients.nome_social
  IS 'Nome social / como prefere ser chamado(a) no atendimento.';

COMMENT ON COLUMN public.patients.etnia
  IS 'Etnia / raça autodeclarada. Exibida no card "Dados pessoais".';

COMMENT ON COLUMN public.patients.canal_preferido
  IS 'Canal preferido de contato. Ex: WhatsApp, Telefone, E-mail.';

COMMENT ON COLUMN public.patients.horario_contato
  IS 'Horário preferido para contato. Ex: 08h–18h.';

COMMENT ON COLUMN public.patients.convenio
  IS 'Nome do convênio para exibição (badge azul no header). Derivado de convenio_id.';

COMMENT ON COLUMN public.patients.convenio_id
  IS 'FK para insurance_plans.id. Vincula o paciente ao convênio cadastrado.';

COMMENT ON COLUMN public.patients.metodo_pagamento_preferido
  IS 'Método de pagamento preferido. Ex: PIX, Cartão crédito. Exibido no card Origem.';

COMMENT ON COLUMN public.patients.motivo_saida
  IS 'Motivo de encerramento do acompanhamento. Exibido no card Origem quando preenchido.';

-- ==========================================================================
-- FIM DA MIGRAÇÃO
-- ==========================================================================
