-- ============================================================
-- SEED DE TESTE — AgenciaPsi
-- ============================================================
-- Cria 10 terapeutas com pacientes, agendamentos, sessões,
-- cancelamentos, remarcações, faltas, grupos, financeiro, etc.
--
-- IMPORTANTE:
--   1) Os usuários (auth.users) devem ser criados via Supabase Auth
--      ou via auth.users INSERT direto (requer service_role).
--      Este script assume que os 10 users já existem no auth.users.
--
--   2) Execute este script com a service_role key no SQL Editor
--      do Supabase (ou via psql com permissão).
--
--   3) Todos os UUIDs são fixos e determinísticos para facilitar
--      depuração. Prefixo:
--        Terapeutas:  aaaaaaaa-0001..0010
--        Tenants:     bbbbbbbb-0001..0010
--        Pacientes:   cccccccc-0001..0050
--        Eventos:     dddddddd-0001..0200
--        Financeiro:  eeeeeeee-0001..0200
--        Grupos:      ffffffff-0001..0020
--        Recorrência: 11111111-0001..0010
--
-- ============================================================

-- ────────────────────────────────────────────────────────────
-- 0. LIMPAR DADOS DE TESTE (idempotente)
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _tenant_ids uuid[] := ARRAY[
    'bbbbbbbb-0000-0000-0000-000000000001'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000002'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000003'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000004'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000005'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000006'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000007'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000008'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000009'::uuid,
    'bbbbbbbb-0000-0000-0000-000000000010'::uuid
  ];
BEGIN
  -- Financeiro
  DELETE FROM public.financial_records WHERE tenant_id = ANY(_tenant_ids);
  -- Eventos
  DELETE FROM public.agenda_eventos WHERE tenant_id = ANY(_tenant_ids);
  -- Recorrências
  DELETE FROM public.recurrence_rules WHERE tenant_id = ANY(_tenant_ids);
  -- Grupos
  DELETE FROM public.patient_group_patient WHERE tenant_id = ANY(_tenant_ids);
  DELETE FROM public.patient_groups WHERE tenant_id = ANY(_tenant_ids);
  -- Pacientes
  DELETE FROM public.patients WHERE tenant_id = ANY(_tenant_ids);
  -- Notificações
  DELETE FROM public.notification_channels WHERE tenant_id = ANY(_tenant_ids);
  DELETE FROM public.notification_templates WHERE tenant_id = ANY(_tenant_ids);
  DELETE FROM public.notification_logs WHERE tenant_id = ANY(_tenant_ids);
  DELETE FROM public.notification_schedules WHERE tenant_id = ANY(_tenant_ids);
  -- Regras semanais
  DELETE FROM public.agenda_regras_semanais WHERE tenant_id = ANY(_tenant_ids);
  -- Serviços
  DELETE FROM public.services WHERE tenant_id = ANY(_tenant_ids);
  -- Tenant members
  DELETE FROM public.tenant_members WHERE tenant_id = ANY(_tenant_ids);
  -- Company profiles
  DELETE FROM public.company_profiles WHERE tenant_id = ANY(_tenant_ids);
  -- Tenants
  DELETE FROM public.tenants WHERE id = ANY(_tenant_ids);
  -- Profiles
  DELETE FROM public.profiles WHERE id IN (
    'aaaaaaaa-0000-0000-0000-000000000001'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000002'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000003'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000004'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000005'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000006'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000007'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000008'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000009'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000010'::uuid
  );
  -- Auth users (requer service_role)
  DELETE FROM auth.users WHERE id IN (
    'aaaaaaaa-0000-0000-0000-000000000001'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000002'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000003'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000004'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000005'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000006'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000007'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000008'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000009'::uuid,
    'aaaaaaaa-0000-0000-0000-000000000010'::uuid
  );
END $$;


-- ────────────────────────────────────────────────────────────
-- 1. USUÁRIOS (auth.users) — 10 terapeutas
-- ────────────────────────────────────────────────────────────
-- Desabilitar triggers que chamam funções inexistentes
ALTER TABLE auth.users DISABLE TRIGGER ALL;

-- Senha: [REDACTED] (hash bcrypt)
INSERT INTO auth.users (
  id, instance_id, email, encrypted_password,
  email_confirmed_at, aud, role,
  raw_app_meta_data, raw_user_meta_data,
  created_at, updated_at
) VALUES
  ('aaaaaaaa-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', 'terapeuta01@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dra. Ana Beatriz"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000002', '00000000-0000-0000-0000-000000000000', 'terapeuta02@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dr. Carlos Eduardo"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000003', '00000000-0000-0000-0000-000000000000', 'terapeuta03@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dra. Fernanda Lima"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000004', '00000000-0000-0000-0000-000000000000', 'terapeuta04@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dr. Gabriel Santos"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000005', '00000000-0000-0000-0000-000000000000', 'terapeuta05@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dra. Juliana Alves"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000006', '00000000-0000-0000-0000-000000000000', 'terapeuta06@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dr. Lucas Oliveira"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000007', '00000000-0000-0000-0000-000000000000', 'terapeuta07@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dra. Mariana Costa"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000008', '00000000-0000-0000-0000-000000000000', 'terapeuta08@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dr. Pedro Henrique"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000009', '00000000-0000-0000-0000-000000000000', 'terapeuta09@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dra. Renata Souza"}', now(), now()),
  ('aaaaaaaa-0000-0000-0000-000000000010', '00000000-0000-0000-0000-000000000000', 'terapeuta10@teste.agenciapsi.com', '$2a$10$PwGnTf1HMjHGZSM0YDi6ku7U7ZZZcXOiI4XOoFSqLJ3szGBTniCeG', now(), 'authenticated', 'authenticated', '{"provider":"email","providers":["email"]}', '{"full_name":"Dr. Thiago Nunes"}', now(), now())
ON CONFLICT (id) DO NOTHING;

-- Identities (necessárias para login via email)
INSERT INTO auth.identities (id, user_id, identity_data, provider, provider_id, last_sign_in_at, created_at, updated_at)
SELECT id, id, jsonb_build_object('sub', id::text, 'email', email), 'email', id::text, now(), now(), now()
FROM auth.users WHERE id IN (
  'aaaaaaaa-0000-0000-0000-000000000001','aaaaaaaa-0000-0000-0000-000000000002',
  'aaaaaaaa-0000-0000-0000-000000000003','aaaaaaaa-0000-0000-0000-000000000004',
  'aaaaaaaa-0000-0000-0000-000000000005','aaaaaaaa-0000-0000-0000-000000000006',
  'aaaaaaaa-0000-0000-0000-000000000007','aaaaaaaa-0000-0000-0000-000000000008',
  'aaaaaaaa-0000-0000-0000-000000000009','aaaaaaaa-0000-0000-0000-000000000010'
)
ON CONFLICT DO NOTHING;

-- Reabilitar triggers
ALTER TABLE auth.users ENABLE TRIGGER ALL;


-- ────────────────────────────────────────────────────────────
-- 2. PROFILES
-- ────────────────────────────────────────────────────────────
INSERT INTO public.profiles (id, full_name, role, phone, bio, account_type) VALUES
  ('aaaaaaaa-0000-0000-0000-000000000001', 'Dra. Ana Beatriz',     'tenant_member', '(11) 91234-0001', 'Psicóloga clínica — TCC e EMDR', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000002', 'Dr. Carlos Eduardo',   'tenant_member', '(11) 91234-0002', 'Psicólogo — Psicanálise', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000003', 'Dra. Fernanda Lima',   'tenant_member', '(16) 91234-0003', 'Psicóloga infantil — Ludoterapia', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000004', 'Dr. Gabriel Santos',   'tenant_member', '(16) 91234-0004', 'Psicólogo — Gestalt-terapia', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000005', 'Dra. Juliana Alves',   'tenant_member', '(21) 91234-0005', 'Psicóloga — Neuropsicologia', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000006', 'Dr. Lucas Oliveira',   'tenant_member', '(21) 91234-0006', 'Psicólogo — Terapia Sistêmica', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000007', 'Dra. Mariana Costa',   'tenant_member', '(31) 91234-0007', 'Psicóloga — Humanismo', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000008', 'Dr. Pedro Henrique',   'tenant_member', '(31) 91234-0008', 'Psicólogo — Análise do Comportamento', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000009', 'Dra. Renata Souza',    'tenant_member', '(41) 91234-0009', 'Psicóloga — Psicossomática', 'therapist'),
  ('aaaaaaaa-0000-0000-0000-000000000010', 'Dr. Thiago Nunes',     'tenant_member', '(41) 91234-0010', 'Psicólogo — Terapia Cognitiva', 'therapist')
ON CONFLICT (id) DO UPDATE SET full_name = EXCLUDED.full_name, role = EXCLUDED.role;


-- ────────────────────────────────────────────────────────────
-- 3. TENANTS + MEMBERS
-- ────────────────────────────────────────────────────────────
INSERT INTO public.tenants (id, name, kind) VALUES
  ('bbbbbbbb-0000-0000-0000-000000000001', 'Consultório Dra. Ana Beatriz',     'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000002', 'Consultório Dr. Carlos Eduardo',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000003', 'Consultório Dra. Fernanda Lima',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000004', 'Consultório Dr. Gabriel Santos',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000005', 'Consultório Dra. Juliana Alves',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000006', 'Consultório Dr. Lucas Oliveira',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000007', 'Consultório Dra. Mariana Costa',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000008', 'Consultório Dr. Pedro Henrique',   'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000009', 'Consultório Dra. Renata Souza',    'therapist'),
  ('bbbbbbbb-0000-0000-0000-000000000010', 'Consultório Dr. Thiago Nunes',     'therapist')
ON CONFLICT (id) DO NOTHING;

INSERT INTO public.tenant_members (tenant_id, user_id, role, status)
SELECT
  ('bbbbbbbb-0000-0000-0000-00000000000' || i)::uuid,
  ('aaaaaaaa-0000-0000-0000-00000000000' || i)::uuid,
  'tenant_admin', 'active'
FROM generate_series(1, 9) AS s(i)
UNION ALL
SELECT
  'bbbbbbbb-0000-0000-0000-000000000010'::uuid,
  'aaaaaaaa-0000-0000-0000-000000000010'::uuid,
  'tenant_admin', 'active'
ON CONFLICT DO NOTHING;


-- ────────────────────────────────────────────────────────────
-- 4. SERVIÇOS (1 serviço padrão por terapeuta)
-- ────────────────────────────────────────────────────────────
INSERT INTO public.services (id, owner_id, tenant_id, name, price, duration_min, active)
SELECT
  ('99999999-0000-0000-0000-00000000000' || i)::uuid,
  ('aaaaaaaa-0000-0000-0000-00000000000' || i)::uuid,
  ('bbbbbbbb-0000-0000-0000-00000000000' || i)::uuid,
  'Sessão Individual', (150 + i * 10)::numeric, 50, true
FROM generate_series(1, 9) AS s(i)
UNION ALL
SELECT
  '99999999-0000-0000-0000-000000000010'::uuid,
  'aaaaaaaa-0000-0000-0000-000000000010'::uuid,
  'bbbbbbbb-0000-0000-0000-000000000010'::uuid,
  'Sessão Individual', 250::numeric, 50, true
ON CONFLICT DO NOTHING;


-- ────────────────────────────────────────────────────────────
-- 5. PACIENTES — 5 por terapeuta = 50 pacientes
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _nomes text[] := ARRAY[
    'Maria Silva','João Pereira','Camila Rocha','Rafael Dias','Larissa Melo',
    'Bruno Costa','Amanda Ferreira','Felipe Souza','Isabela Nunes','Diego Almeida',
    'Patrícia Lima','Rodrigo Santos','Letícia Araujo','Gustavo Ribeiro','Bianca Carvalho',
    'Matheus Gomes','Natália Barbosa','André Vieira','Carolina Martins','Lucas Teixeira',
    'Aline Pinto','Henrique Moura','Vanessa Cardoso','Marcos Fernandes','Tatiana Lopes',
    'Thiago Nascimento','Juliana Duarte','Eduardo Correia','Fernanda Monteiro','Paulo Campos',
    'Simone Reis','Ricardo Azevedo','Debora Mendes','Alexandre Freitas','Sandra Oliveira',
    'Daniel Cunha','Priscila Moreira','Roberto Andrade','Cláudia Batista','Leandro Rezende',
    'Adriana Sousa','Vinicius Castro','Luciana Pereira','Fabio Miranda','Elaine Barros',
    'Renato Faria','Cristina Machado','Marcelo Prado','Gabriela Assis','Sergio Nogueira'
  ];
  _phones text[] := ARRAY[
    '(11) 98765-1001','(11) 98765-1002','(11) 98765-1003','(11) 98765-1004','(11) 98765-1005',
    '(11) 98765-1006','(11) 98765-1007','(11) 98765-1008','(11) 98765-1009','(11) 98765-1010',
    '(16) 98765-1011','(16) 98765-1012','(16) 98765-1013','(16) 98765-1014','(16) 98765-1015',
    '(16) 98765-1016','(16) 98765-1017','(16) 98765-1018','(16) 98765-1019','(16) 98765-1020',
    '(21) 98765-1021','(21) 98765-1022','(21) 98765-1023','(21) 98765-1024','(21) 98765-1025',
    '(21) 98765-1026','(21) 98765-1027','(21) 98765-1028','(21) 98765-1029','(21) 98765-1030',
    '(31) 98765-1031','(31) 98765-1032','(31) 98765-1033','(31) 98765-1034','(31) 98765-1035',
    '(31) 98765-1036','(31) 98765-1037','(31) 98765-1038','(31) 98765-1039','(31) 98765-1040',
    '(41) 98765-1041','(41) 98765-1042','(41) 98765-1043','(41) 98765-1044','(41) 98765-1045',
    '(41) 98765-1046','(41) 98765-1047','(41) 98765-1048','(41) 98765-1049','(41) 98765-1050'
  ];
  _statuses text[] := ARRAY['Ativo','Ativo','Ativo','Ativo','Inativo'];
  _t int;
  _p int;
  _idx int;
  _pid uuid;
  _oid uuid;
  _tid uuid;
  _mid uuid;
BEGIN
  FOR _t IN 1..10 LOOP
    IF _t < 10 THEN
      _oid := ('aaaaaaaa-0000-0000-0000-00000000000' || _t)::uuid;
      _tid := ('bbbbbbbb-0000-0000-0000-00000000000' || _t)::uuid;
    ELSE
      _oid := 'aaaaaaaa-0000-0000-0000-000000000010'::uuid;
      _tid := 'bbbbbbbb-0000-0000-0000-000000000010'::uuid;
    END IF;

    -- Buscar o id do tenant_member para este user/tenant
    SELECT id INTO _mid FROM public.tenant_members
    WHERE tenant_id = _tid AND user_id = _oid LIMIT 1;

    FOR _p IN 1..5 LOOP
      _idx := (_t - 1) * 5 + _p;
      _pid := ('cccccccc-0000-0000-0000-' || lpad(_idx::text, 12, '0'))::uuid;

      INSERT INTO public.patients (
        id, nome_completo, email_principal, telefone,
        status, owner_id, tenant_id, responsible_member_id,
        data_nascimento, genero, cidade, estado
      ) VALUES (
        _pid,
        _nomes[_idx],
        'paciente' || _idx || '@teste.agenciapsi.com',
        _phones[_idx],
        _statuses[_p],
        _oid, _tid, _mid,
        '1985-01-01'::date + (_idx * 120 || ' days')::interval,
        CASE WHEN _idx % 2 = 0 THEN 'Feminino' ELSE 'Masculino' END,
        CASE
          WHEN _t <= 2 THEN 'são Paulo'
          WHEN _t <= 4 THEN 'são Carlos'
          WHEN _t <= 6 THEN 'Rio de Janeiro'
          WHEN _t <= 8 THEN 'Belo Horizonte'
          ELSE 'Curitiba'
        END,
        CASE
          WHEN _t <= 2 THEN 'SP'
          WHEN _t <= 4 THEN 'SP'
          WHEN _t <= 6 THEN 'RJ'
          WHEN _t <= 8 THEN 'MG'
          ELSE 'PR'
        END
      ) ON CONFLICT (id) DO NOTHING;
    END LOOP;
  END LOOP;
END $$;


-- ────────────────────────────────────────────────────────────
-- 6. GRUPOS DE PACIENTES — 2 por terapeuta
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _t int;
  _oid uuid;
  _tid uuid;
  _g1 uuid;
  _g2 uuid;
BEGIN
  FOR _t IN 1..10 LOOP
    IF _t < 10 THEN
      _oid := ('aaaaaaaa-0000-0000-0000-00000000000' || _t)::uuid;
      _tid := ('bbbbbbbb-0000-0000-0000-00000000000' || _t)::uuid;
    ELSE
      _oid := 'aaaaaaaa-0000-0000-0000-000000000010'::uuid;
      _tid := 'bbbbbbbb-0000-0000-0000-000000000010'::uuid;
    END IF;

    _g1 := ('ffffffff-0000-0000-0000-' || lpad(((_t-1)*2+1)::text, 12, '0'))::uuid;
    _g2 := ('ffffffff-0000-0000-0000-' || lpad(((_t-1)*2+2)::text, 12, '0'))::uuid;

    INSERT INTO public.patient_groups (id, owner_id, tenant_id, nome, cor, is_active)
    VALUES
      (_g1, _oid, _tid, 'Adultos',   '#6366f1', true),
      (_g2, _oid, _tid, 'Crianças',  '#f59e0b', true)
    ON CONFLICT (id) DO NOTHING;

    -- Adicionar 3 pacientes ao grupo Adultos, 2 ao grupo Crianças
    INSERT INTO public.patient_group_patient (patient_id, patient_group_id, tenant_id)
    SELECT
      ('cccccccc-0000-0000-0000-' || lpad(((_t-1)*5 + p)::text, 12, '0'))::uuid,
      CASE WHEN p <= 3 THEN _g1 ELSE _g2 END,
      _tid
    FROM generate_series(1, 5) AS s(p)
    ON CONFLICT DO NOTHING;
  END LOOP;
END $$;


-- ────────────────────────────────────────────────────────────
-- 7. AGENDA — Eventos do último mês + próxima semana
-- Tipos: realizado, faltou, cancelado, agendado, remarcar
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _t int;
  _p int;
  _d int;
  _idx int;
  _oid uuid;
  _tid uuid;
  _pid uuid;
  _eid uuid;
  _status text;
  _statuses text[] := ARRAY['realizado','realizado','realizado','faltou','cancelado','realizado','agendado','remarcar','realizado','realizado',
                             'realizado','realizado','faltou','realizado','cancelado','agendado','agendado','realizado','realizado','realizado'];
  _dia date;
  _hora time;
  _horas time[] := ARRAY['08:00','09:00','10:00','11:00','14:00'];
  _evt_counter int := 0;
  _modalidade text;
BEGIN
  FOR _t IN 1..10 LOOP
    IF _t < 10 THEN
      _oid := ('aaaaaaaa-0000-0000-0000-00000000000' || _t)::uuid;
      _tid := ('bbbbbbbb-0000-0000-0000-00000000000' || _t)::uuid;
    ELSE
      _oid := 'aaaaaaaa-0000-0000-0000-000000000010'::uuid;
      _tid := 'bbbbbbbb-0000-0000-0000-000000000010'::uuid;
    END IF;

    -- 4 semanas de sessões (seg-sex), 1 sessão por paciente por semana
    FOR _d IN 0..27 LOOP
      _dia := (current_date - interval '28 days' + (_d || ' days')::interval)::date;
      -- Pular finais de semana
      IF extract(dow FROM _dia) IN (0, 6) THEN CONTINUE; END IF;

      FOR _p IN 1..5 LOOP
        -- Cada paciente tem sessão 1x/semana (dias alternados)
        IF (_d % 5) != (_p - 1) THEN CONTINUE; END IF;

        _evt_counter := _evt_counter + 1;
        _idx := (_t - 1) * 5 + _p;
        _pid := ('cccccccc-0000-0000-0000-' || lpad(_idx::text, 12, '0'))::uuid;
        _eid := ('dddddddd-0000-0000-0000-' || lpad(_evt_counter::text, 12, '0'))::uuid;
        _hora := _horas[_p];
        _status := _statuses[(_evt_counter - 1) % 20 + 1];
        _modalidade := CASE WHEN _p <= 3 THEN 'presencial' ELSE 'online' END;

        -- Eventos futuros devem ser 'agendado'
        IF _dia > current_date THEN _status := 'agendado'; END IF;

        INSERT INTO public.agenda_eventos (
          id, owner_id, tenant_id, tipo, status,
          patient_id, terapeuta_id,
          inicio_em, fim_em,
          titulo, modalidade
        ) VALUES (
          _eid, _oid, _tid, 'sessao'::tipo_evento_agenda, _status::status_evento_agenda,
          _pid, _oid,
          (_dia || ' ' || _hora)::timestamptz,
          (_dia || ' ' || _hora)::timestamptz + interval '50 minutes',
          'Sessão — ' || (SELECT nome_completo FROM public.patients WHERE id = _pid),
          _modalidade
        ) ON CONFLICT (id) DO NOTHING;
      END LOOP;
    END LOOP;
  END LOOP;

  RAISE NOTICE 'Total de eventos criados: %', _evt_counter;
END $$;


-- ────────────────────────────────────────────────────────────
-- 8. FINANCEIRO — 1 lançamento por evento realizado
-- ────────────────────────────────────────────────────────────
INSERT INTO public.financial_records (
  id, owner_id, tenant_id, type, amount, final_amount, description,
  category, payment_method, status, paid_at, due_date,
  agenda_evento_id, patient_id
)
SELECT
  gen_random_uuid(),
  ae.owner_id,
  ae.tenant_id,
  'receita',
  v.amt,
  v.amt,
  CASE
    WHEN ae.status = 'realizado' THEN 'Sessão realizada'
    WHEN ae.status = 'faltou'    THEN 'Falta — cobrança parcial'
    ELSE 'Sessão cancelada'
  END,
  'Sessão',
  CASE WHEN random() > 0.5 THEN 'pix' ELSE 'cartao_credito' END,
  CASE
    WHEN ae.status = 'realizado' THEN 'paid'
    WHEN ae.status = 'faltou'    THEN 'pending'
    ELSE 'cancelled'
  END,
  CASE WHEN ae.status = 'realizado' THEN ae.inicio_em ELSE NULL END,
  ae.inicio_em::date,
  ae.id,
  ae.patient_id
FROM public.agenda_eventos ae
CROSS JOIN LATERAL (
  SELECT CASE
    WHEN ae.status = 'realizado' THEN (150 + (random() * 100)::int)::numeric
    WHEN ae.status = 'faltou'    THEN (75 + (random() * 50)::int)::numeric
    ELSE 0
  END AS amt
) v
WHERE ae.tenant_id IN (
  SELECT id FROM public.tenants WHERE id::text LIKE 'bbbbbbbb%'
)
AND ae.status IN ('realizado', 'faltou', 'cancelado');


-- ────────────────────────────────────────────────────────────
-- 9. REGRAS SEMANAIS — horários de atendimento
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _t int;
  _d int;
  _oid uuid;
  _tid uuid;
BEGIN
  FOR _t IN 1..10 LOOP
    IF _t < 10 THEN
      _oid := ('aaaaaaaa-0000-0000-0000-00000000000' || _t)::uuid;
      _tid := ('bbbbbbbb-0000-0000-0000-00000000000' || _t)::uuid;
    ELSE
      _oid := 'aaaaaaaa-0000-0000-0000-000000000010'::uuid;
      _tid := 'bbbbbbbb-0000-0000-0000-000000000010'::uuid;
    END IF;

    -- Segunda a sexta, 8h-12h e 14h-18h
    FOR _d IN 1..5 LOOP
      INSERT INTO public.agenda_regras_semanais (owner_id, tenant_id, dia_semana, hora_inicio, hora_fim, modalidade, ativo)
      VALUES
        (_oid, _tid, _d, '08:00', '12:00', 'ambos', true),
        (_oid, _tid, _d, '14:00', '18:00', 'ambos', true)
      ON CONFLICT DO NOTHING;
    END LOOP;
  END LOOP;
END $$;


-- ────────────────────────────────────────────────────────────
-- 10. RECORRÊNCIAS — 1 por terapeuta (paciente 1)
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _t int;
  _oid uuid;
  _tid uuid;
  _pid uuid;
  _rid uuid;
BEGIN
  FOR _t IN 1..10 LOOP
    IF _t < 10 THEN
      _oid := ('aaaaaaaa-0000-0000-0000-00000000000' || _t)::uuid;
      _tid := ('bbbbbbbb-0000-0000-0000-00000000000' || _t)::uuid;
    ELSE
      _oid := 'aaaaaaaa-0000-0000-0000-000000000010'::uuid;
      _tid := 'bbbbbbbb-0000-0000-0000-000000000010'::uuid;
    END IF;

    _pid := ('cccccccc-0000-0000-0000-' || lpad(((_t-1)*5 + 1)::text, 12, '0'))::uuid;
    _rid := ('11111111-0000-0000-0000-' || lpad(_t::text, 12, '0'))::uuid;

    INSERT INTO public.recurrence_rules (
      id, tenant_id, owner_id, patient_id,
      type, weekdays, start_time, end_time,
      start_date, open_ended, modalidade, status
    ) VALUES (
      _rid, _tid, _oid, _pid,
      'weekly', ARRAY[(_t % 5) + 1]::smallint[], '09:00', '09:50',
      current_date - interval '30 days', true, 'presencial', 'ativo'
    ) ON CONFLICT (id) DO NOTHING;
  END LOOP;
END $$;


-- ────────────────────────────────────────────────────────────
-- 11. NOTIFICATION SCHEDULES — 1 set por terapeuta
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _t int;
  _oid uuid;
  _tid uuid;
BEGIN
  FOR _t IN 1..10 LOOP
    IF _t < 10 THEN
      _oid := ('aaaaaaaa-0000-0000-0000-00000000000' || _t)::uuid;
      _tid := ('bbbbbbbb-0000-0000-0000-00000000000' || _t)::uuid;
    ELSE
      _oid := 'aaaaaaaa-0000-0000-0000-000000000010'::uuid;
      _tid := 'bbbbbbbb-0000-0000-0000-000000000010'::uuid;
    END IF;

    INSERT INTO public.notification_schedules (
      tenant_id, owner_id, schedule_key, event_type,
      trigger_type, offset_minutes,
      whatsapp_enabled, email_enabled, is_active
    ) VALUES
      (_tid, _oid, 'lembrete_24h',  'lembrete_sessao',      'before_event', 1440, true, true, true),
      (_tid, _oid, 'lembrete_2h',   'lembrete_sessao',      'before_event', 120,  true, false, true),
      (_tid, _oid, 'confirmacao',   'confirmacao_sessao',    'immediate',    0,    true, true, true),
      (_tid, _oid, 'cancelamento',  'cancelamento_sessao',   'immediate',    0,    true, true, true)
    ON CONFLICT DO NOTHING;
  END LOOP;
END $$;


-- ════════════════════════════════════════════════════════════
-- 12. DADOS PARA terapeuta@agenciapsi.com.br
-- ════════════════════════════════════════════════════════════
-- 20 pacientes, 10+ grupos, 10+ eventos de cada status,
-- 10+ lançamentos, 10+ regras semanais, 10+ recorrências,
-- 10+ notificações
-- ────────────────────────────────────────────────────────────

-- 12a. LIMPEZA dos dados de teste deste usuário
DO $$
DECLARE
  _oid uuid;
  _tid uuid;
BEGIN
  SELECT id INTO _oid FROM auth.users WHERE email = 'terapeuta@agenciapsi.com.br';
  IF _oid IS NULL THEN
    RAISE NOTICE 'Usuário terapeuta@agenciapsi.com.br não encontrado — pulando limpeza';
    RETURN;
  END IF;

  SELECT t.id INTO _tid
  FROM public.tenants t
  JOIN public.tenant_members tm ON tm.tenant_id = t.id
  WHERE tm.user_id = _oid
  LIMIT 1;

  IF _tid IS NULL THEN
    RAISE NOTICE 'Tenant não encontrado para terapeuta@agenciapsi.com.br — pulando limpeza';
    RETURN;
  END IF;

  -- Limpar apenas dados de seed (pacientes com email @seed.teste)
  DELETE FROM public.financial_records WHERE tenant_id = _tid AND description LIKE '%[SEED]%';
  DELETE FROM public.agenda_eventos WHERE tenant_id = _tid AND titulo LIKE '%[SEED]%';
  DELETE FROM public.recurrence_rules WHERE tenant_id = _tid AND observacoes = '[SEED]';
  DELETE FROM public.patient_group_patient WHERE tenant_id = _tid AND patient_id IN (
    SELECT id FROM public.patients WHERE tenant_id = _tid AND email_principal LIKE '%@seed.teste.agenciapsi.com'
  );
  DELETE FROM public.patient_groups WHERE tenant_id = _tid AND nome LIKE '%[SEED]%';
  DELETE FROM public.patients WHERE tenant_id = _tid AND email_principal LIKE '%@seed.teste.agenciapsi.com';
  DELETE FROM public.agenda_regras_semanais WHERE tenant_id = _tid AND owner_id = _oid;
  DELETE FROM public.notification_schedules WHERE tenant_id = _tid AND owner_id = _oid;

  RAISE NOTICE 'Limpeza concluída para terapeuta@agenciapsi.com.br (tenant: %)', _tid;
END $$;


-- 12b. INSERIR DADOS
DO $$
DECLARE
  _oid uuid;
  _tid uuid;
  _mid uuid;
  _pid uuid;
  _eid uuid;
  _gid uuid;
  _i int;
  _d int;
  _dia date;
  _hora time;
  _status text;
  _evt_counter int := 0;

  _nomes text[] := ARRAY[
    'Amanda Rodrigues','Bruno Ferreira','Camila Teixeira','Diego Nascimento','Elisa Cardoso',
    'Felipe Moura','Giovana Ribeiro','Hugo Martins','Isabela Correia','João Vitor Almeida',
    'Karen Oliveira','Leonardo Duarte','Marina Santos','Nicolas Costa','Olívia Mendes',
    'Paulo Ricardo','Quésia Lima','Rafael Araújo','Sofia Carvalho','Tomás Barbosa'
  ];
  _phones text[] := ARRAY[
    '(16) 99001-0001','(16) 99001-0002','(16) 99001-0003','(16) 99001-0004','(16) 99001-0005',
    '(16) 99001-0006','(16) 99001-0007','(16) 99001-0008','(16) 99001-0009','(16) 99001-0010',
    '(16) 99001-0011','(16) 99001-0012','(16) 99001-0013','(16) 99001-0014','(16) 99001-0015',
    '(16) 99001-0016','(16) 99001-0017','(16) 99001-0018','(16) 99001-0019','(16) 99001-0020'
  ];
  _cidades text[] := ARRAY[
    'são Carlos','são Carlos','Araraquara','Araraquara','Ribeirão Preto',
    'Ribeirão Preto','são Carlos','são Carlos','Araraquara','Araraquara',
    'são Carlos','são Carlos','Ribeirão Preto','Ribeirão Preto','são Carlos',
    'são Carlos','Araraquara','Araraquara','Ribeirão Preto','são Carlos'
  ];
  _generos text[] := ARRAY[
    'Feminino','Masculino','Feminino','Masculino','Feminino',
    'Masculino','Feminino','Masculino','Feminino','Masculino',
    'Feminino','Masculino','Feminino','Masculino','Feminino',
    'Masculino','Feminino','Masculino','Feminino','Masculino'
  ];

  _grupo_nomes text[] := ARRAY[
    'Adultos [SEED]','Adolescentes [SEED]','Crianças [SEED]','Casais [SEED]','Idosos [SEED]',
    'TCC [SEED]','Psicanálise [SEED]','Gestalt [SEED]','EMDR [SEED]','Grupo Familiar [SEED]'
  ];
  _grupo_cores text[] := ARRAY[
    '#6366f1','#f59e0b','#10b981','#ef4444','#8b5cf6',
    '#3b82f6','#ec4899','#14b8a6','#f97316','#64748b'
  ];

  -- Status cíclicos para eventos passados
  _statuses text[] := ARRAY[
    'realizado','realizado','realizado','faltou','cancelado',
    'realizado','realizado','remarcar','realizado','faltou',
    'realizado','realizado','realizado','cancelado','realizado',
    'realizado','faltou','realizado','realizado','realizado'
  ];

  _horas time[] := ARRAY['08:00','09:00','10:00','11:00','14:00','15:00','16:00','17:00'];

BEGIN
  -- Buscar user
  SELECT id INTO _oid FROM auth.users WHERE email = 'terapeuta@agenciapsi.com.br';
  IF _oid IS NULL THEN
    RAISE NOTICE 'Usuário terapeuta@agenciapsi.com.br não encontrado — abortando seed';
    RETURN;
  END IF;

  -- Buscar tenant
  SELECT t.id INTO _tid
  FROM public.tenants t
  JOIN public.tenant_members tm ON tm.tenant_id = t.id
  WHERE tm.user_id = _oid
  LIMIT 1;

  IF _tid IS NULL THEN
    RAISE NOTICE 'Tenant não encontrado — abortando seed';
    RETURN;
  END IF;

  -- Buscar member_id
  SELECT id INTO _mid FROM public.tenant_members
  WHERE tenant_id = _tid AND user_id = _oid LIMIT 1;

  RAISE NOTICE 'Seed para: % / tenant: % / member: %', _oid, _tid, _mid;

  -- ── 20 PACIENTES ──────────────────────────────────────────
  FOR _i IN 1..20 LOOP
    _pid := gen_random_uuid();

    INSERT INTO public.patients (
      id, nome_completo, email_principal, telefone,
      status, owner_id, tenant_id, responsible_member_id,
      data_nascimento, genero, cidade, estado
    ) VALUES (
      _pid,
      _nomes[_i],
      'seed.paciente' || _i || '@seed.teste.agenciapsi.com',
      _phones[_i],
      CASE WHEN _i <= 16 THEN 'Ativo' WHEN _i <= 18 THEN 'Inativo' ELSE 'Alta' END,
      _oid, _tid, _mid,
      ('1980-01-01'::date + (_i * 400 || ' days')::interval)::date,
      _generos[_i],
      _cidades[_i],
      'SP'
    );
  END LOOP;

  -- ── 10 GRUPOS ─────────────────────────────────────────────
  FOR _i IN 1..10 LOOP
    _gid := gen_random_uuid();

    INSERT INTO public.patient_groups (id, owner_id, tenant_id, nome, cor, is_active)
    VALUES (_gid, _oid, _tid, _grupo_nomes[_i], _grupo_cores[_i], true);

    -- Adicionar 2 pacientes por grupo
    INSERT INTO public.patient_group_patient (patient_id, patient_group_id, tenant_id)
    SELECT p.id, _gid, _tid
    FROM public.patients p
    WHERE p.tenant_id = _tid
      AND p.email_principal LIKE '%@seed.teste.agenciapsi.com'
    ORDER BY p.nome_completo
    OFFSET ((_i - 1) * 2)
    LIMIT 2;
  END LOOP;

  -- ── EVENTOS (últimos 42 dias + próxima semana) ────────────
  -- Garante pelo menos: 10 realizado, 10 faltou, 10 cancelado,
  -- 10 agendado, 10 remarcar
  _evt_counter := 0;

  FOR _d IN 0..48 LOOP
    _dia := (current_date - interval '42 days' + (_d || ' days')::interval)::date;
    IF extract(dow FROM _dia) IN (0, 6) THEN CONTINUE; END IF;

    FOR _i IN 1..4 LOOP
      _evt_counter := _evt_counter + 1;
      _hora := _horas[((_evt_counter - 1) % 8) + 1];

      -- Pegar um paciente cíclico
      SELECT id INTO _pid FROM public.patients
      WHERE tenant_id = _tid AND email_principal LIKE '%@seed.teste.agenciapsi.com'
      ORDER BY nome_completo
      OFFSET ((_evt_counter - 1) % 20)
      LIMIT 1;

      IF _pid IS NULL THEN CONTINUE; END IF;

      -- Status: passado = cíclico, futuro = agendado
      IF _dia > current_date THEN
        _status := 'agendado';
      ELSE
        _status := _statuses[((_evt_counter - 1) % 20) + 1];
      END IF;

      _eid := gen_random_uuid();

      BEGIN
        INSERT INTO public.agenda_eventos (
          id, owner_id, tenant_id, tipo, status,
          patient_id, terapeuta_id,
          inicio_em, fim_em,
          titulo, modalidade
        ) VALUES (
          _eid, _oid, _tid,
          'sessao'::tipo_evento_agenda,
          _status::status_evento_agenda,
          _pid, _oid,
          (_dia || ' ' || _hora)::timestamptz,
          (_dia || ' ' || _hora)::timestamptz + interval '50 minutes',
          '[SEED] Sessão — ' || _nomes[((_evt_counter - 1) % 20) + 1],
          CASE WHEN _i <= 2 THEN 'presencial' ELSE 'online' END
        );
      EXCEPTION WHEN exclusion_violation THEN
        -- Horário já ocupado, pular
        NULL;
      END;
    END LOOP;
  END LOOP;

  RAISE NOTICE 'Eventos tentados: % (alguns podem ter sido pulados por sobreposição)', _evt_counter;

  -- ── FINANCEIRO ────────────────────────────────────────────
  INSERT INTO public.financial_records (
    id, owner_id, tenant_id, type, amount, final_amount, description,
    category, payment_method, status, paid_at, due_date,
    agenda_evento_id, patient_id
  )
  SELECT
    gen_random_uuid(),
    ae.owner_id,
    ae.tenant_id,
    'receita',
    v.amt,
    v.amt,
    '[SEED] ' || CASE
      WHEN ae.status = 'realizado'::status_evento_agenda THEN 'Sessão realizada'
      WHEN ae.status = 'faltou'::status_evento_agenda    THEN 'Falta — cobrança parcial'
      ELSE 'Sessão cancelada'
    END,
    'Sessão',
    CASE WHEN random() > 0.5 THEN 'pix' ELSE 'cartao_credito' END,
    CASE
      WHEN ae.status = 'realizado'::status_evento_agenda THEN 'paid'
      WHEN ae.status = 'faltou'::status_evento_agenda    THEN 'pending'
      ELSE 'cancelled'
    END,
    CASE WHEN ae.status = 'realizado'::status_evento_agenda THEN ae.inicio_em ELSE NULL END,
    ae.inicio_em::date,
    ae.id,
    ae.patient_id
  FROM public.agenda_eventos ae
  CROSS JOIN LATERAL (
    SELECT CASE
      WHEN ae.status = 'realizado'::status_evento_agenda THEN (150 + (random() * 100)::int)::numeric
      WHEN ae.status = 'faltou'::status_evento_agenda    THEN (75 + (random() * 50)::int)::numeric
      ELSE 0
    END AS amt
  ) v
  WHERE ae.tenant_id = _tid
    AND ae.titulo LIKE '[SEED]%'
    AND ae.status IN ('realizado'::status_evento_agenda, 'faltou'::status_evento_agenda, 'cancelado'::status_evento_agenda);

  -- ── REGRAS SEMANAIS (10 — manhã e tarde, seg-sex) ────────
  INSERT INTO public.agenda_regras_semanais (owner_id, tenant_id, dia_semana, hora_inicio, hora_fim, modalidade, ativo)
  VALUES
    (_oid, _tid, 1, '08:00', '12:00', 'ambos', true),
    (_oid, _tid, 1, '14:00', '18:00', 'ambos', true),
    (_oid, _tid, 2, '08:00', '12:00', 'ambos', true),
    (_oid, _tid, 2, '14:00', '18:00', 'ambos', true),
    (_oid, _tid, 3, '08:00', '12:00', 'ambos', true),
    (_oid, _tid, 3, '14:00', '18:00', 'ambos', true),
    (_oid, _tid, 4, '08:00', '12:00', 'ambos', true),
    (_oid, _tid, 4, '14:00', '18:00', 'ambos', true),
    (_oid, _tid, 5, '08:00', '12:00', 'ambos', true),
    (_oid, _tid, 5, '14:00', '18:00', 'ambos', true)
  ON CONFLICT DO NOTHING;

  -- ── RECORRÊNCIAS (10 pacientes com sessão semanal) ────────
  FOR _i IN 1..10 LOOP
    SELECT id INTO _pid FROM public.patients
    WHERE tenant_id = _tid AND email_principal LIKE '%@seed.teste.agenciapsi.com'
    ORDER BY nome_completo
    OFFSET (_i - 1) LIMIT 1;

    IF _pid IS NULL THEN CONTINUE; END IF;

    INSERT INTO public.recurrence_rules (
      id, tenant_id, owner_id, patient_id, type, weekdays,
      start_time, end_time, start_date, open_ended, modalidade, status, observacoes
    ) VALUES (
      gen_random_uuid(), _tid, _oid, _pid, 'weekly',
      ARRAY[_i % 5]::int[],
      ('08:00'::time + ((_i - 1) * 60 || ' minutes')::interval),
      ('08:50'::time + ((_i - 1) * 60 || ' minutes')::interval),
      current_date - interval '30 days',
      true,
      CASE WHEN _i <= 5 THEN 'presencial' ELSE 'online' END,
      'ativo',
      '[SEED]'
    );
  END LOOP;

  -- ── NOTIFICATION SCHEDULES (10) ───────────────────────────
  INSERT INTO public.notification_schedules (
    tenant_id, owner_id, schedule_key, event_type,
    trigger_type, offset_minutes,
    whatsapp_enabled, email_enabled, is_active
  ) VALUES
    (_tid, _oid, 'lembrete_24h',        'lembrete_sessao',      'before_event', 1440, true,  true,  true),
    (_tid, _oid, 'lembrete_2h',         'lembrete_sessao',      'before_event', 120,  true,  false, true),
    (_tid, _oid, 'lembrete_30min',      'lembrete_sessao',      'before_event', 30,   true,  false, true),
    (_tid, _oid, 'confirmacao',         'confirmacao_sessao',    'immediate',    0,    true,  true,  true),
    (_tid, _oid, 'cancelamento',        'cancelamento_sessao',   'immediate',    0,    true,  true,  true),
    (_tid, _oid, 'lembrete_48h',        'lembrete_sessao',      'before_event', 2880, false, true,  true),
    (_tid, _oid, 'lembrete_1h',         'lembrete_sessao',      'before_event', 60,   true,  false, true),
    (_tid, _oid, 'confirmacao_email',   'confirmacao_sessao',    'immediate',    0,    false, true,  true),
    (_tid, _oid, 'cancel_email',        'cancelamento_sessao',   'immediate',    0,    false, true,  true),
    (_tid, _oid, 'lembrete_1semana',    'lembrete_sessao',      'before_event', 10080,false, true,  false)
  ON CONFLICT DO NOTHING;

  RAISE NOTICE '══════════════════════════════════════════';
  RAISE NOTICE '  SEED terapeuta@agenciapsi.com.br COMPLETO';
  RAISE NOTICE '  Pacientes: 20';
  RAISE NOTICE '  Grupos: 10';
  RAISE NOTICE '  Eventos: %', _evt_counter;
  RAISE NOTICE '  Regras semanais: 10';
  RAISE NOTICE '  Recorrências: 10';
  RAISE NOTICE '  Notificações: 10';
  RAISE NOTICE '══════════════════════════════════════════';
END $$;


-- ────────────────────────────────────────────────────────────
-- 13. RESUMO
-- ────────────────────────────────────────────────────────────
DO $$
DECLARE
  _users int;
  _tenants int;
  _patients int;
  _events int;
  _records int;
  _groups int;
  _recurrences int;
BEGIN
  SELECT count(*) INTO _users FROM auth.users WHERE id::text LIKE 'aaaaaaaa%';
  SELECT count(*) INTO _tenants FROM public.tenants WHERE id::text LIKE 'bbbbbbbb%';
  SELECT count(*) INTO _patients FROM public.patients WHERE tenant_id::text LIKE 'bbbbbbbb%';
  SELECT count(*) INTO _events FROM public.agenda_eventos WHERE tenant_id::text LIKE 'bbbbbbbb%';
  SELECT count(*) INTO _records FROM public.financial_records WHERE tenant_id::text LIKE 'bbbbbbbb%';
  SELECT count(*) INTO _groups FROM public.patient_groups WHERE tenant_id::text LIKE 'bbbbbbbb%';
  SELECT count(*) INTO _recurrences FROM public.recurrence_rules WHERE tenant_id::text LIKE 'bbbbbbbb%';

  RAISE NOTICE '══════════════════════════════════════════';
  RAISE NOTICE '  SEED COMPLETO — RESUMO';
  RAISE NOTICE '══════════════════════════════════════════';
  RAISE NOTICE '  Terapeutas:       %', _users;
  RAISE NOTICE '  Tenants:          %', _tenants;
  RAISE NOTICE '  Pacientes:        %', _patients;
  RAISE NOTICE '  Eventos agenda:   %', _events;
  RAISE NOTICE '  Lançamentos fin.: %', _records;
  RAISE NOTICE '  Grupos:           %', _groups;
  RAISE NOTICE '  Recorrências:     %', _recurrences;
  RAISE NOTICE '══════════════════════════════════════════';
  RAISE NOTICE '  Login: terapeuta01@teste.agenciapsi.com';
  RAISE NOTICE '  Senha: [REDACTED]
  RAISE NOTICE '══════════════════════════════════════════';
END $$;
