-- =============================================================================
-- SEED 003 — Terapeuta 2, Terapeuta 3 e Secretária
-- =============================================================================
-- Execute APÓS seed_001.sql (e seed_002.sql se quiser todos os seeds)
-- Requer: pgcrypto (já ativo no Supabase)
--
-- Cria os seguintes usuários de teste:
--
--   therapist2@agenciapsi.com.br  senha: Teste@123  → terapeuta 2 (tenant próprio + Clínica 3)
--   therapist3@agenciapsi.com.br  senha: Teste@123  → terapeuta 3 (tenant próprio + Clínica 3)
--   secretary@agenciapsi.com.br   senha: Teste@123  → clinic_admin na Clínica 2 (Mente Sã)
--
-- UUIDs reservados:
--   Terapeuta 2  → aaaaaaaa-0009-0009-0009-000000000009
--   Terapeuta 3  → aaaaaaaa-0010-0010-0010-000000000010
--   Secretária   → aaaaaaaa-0011-0011-0011-000000000011
-- Tenant Terapeuta 2 → bbbbbbbb-0009-0009-0009-000000000009
-- Tenant Terapeuta 3 → bbbbbbbb-0010-0010-0010-000000000010
-- =============================================================================

BEGIN;

-- ============================================================
-- 1. Remove seeds anteriores (idempotente)
-- ============================================================

DELETE FROM auth.users
WHERE email IN (
  'therapist2@agenciapsi.com.br',
  'therapist3@agenciapsi.com.br',
  'secretary@agenciapsi.com.br'
);


-- ============================================================
-- 2. Cria usuários no auth.users
-- ⚠️  confirmed_at é coluna gerada — NÃO incluir na lista
-- ============================================================

INSERT INTO auth.users (
  instance_id,
  id,
  email,
  encrypted_password,
  email_confirmed_at,
  created_at,
  updated_at,
  raw_user_meta_data,
  raw_app_meta_data,
  role,
  aud,
  is_sso_user,
  is_anonymous,
  confirmation_token,
  recovery_token,
  email_change_token_new,
  email_change_token_current,
  email_change
)
VALUES
  -- Terapeuta 2
  (
    '00000000-0000-0000-0000-000000000000',
    'aaaaaaaa-0009-0009-0009-000000000009',
    'therapist2@agenciapsi.com.br',
    crypt('Teste@123', gen_salt('bf')),
    now(), now(), now(),
    '{"name": "Eva Terapeuta"}'::jsonb,
    '{"provider": "email", "providers": ["email"]}'::jsonb,
    'authenticated', 'authenticated', false, false, '', '', '', '', ''
  ),
  -- Terapeuta 3
  (
    '00000000-0000-0000-0000-000000000000',
    'aaaaaaaa-0010-0010-0010-000000000010',
    'therapist3@agenciapsi.com.br',
    crypt('Teste@123', gen_salt('bf')),
    now(), now(), now(),
    '{"name": "Felipe Terapeuta"}'::jsonb,
    '{"provider": "email", "providers": ["email"]}'::jsonb,
    'authenticated', 'authenticated', false, false, '', '', '', '', ''
  ),
  -- Secretária
  (
    '00000000-0000-0000-0000-000000000000',
    'aaaaaaaa-0011-0011-0011-000000000011',
    'secretary@agenciapsi.com.br',
    crypt('Teste@123', gen_salt('bf')),
    now(), now(), now(),
    '{"name": "Gabriela Secretária"}'::jsonb,
    '{"provider": "email", "providers": ["email"]}'::jsonb,
    'authenticated', 'authenticated', false, false, '', '', '', '', ''
  );


-- ============================================================
-- 3. auth.identities (obrigatório para GoTrue reconhecer login)
-- ============================================================

INSERT INTO auth.identities (id, user_id, provider_id, provider, identity_data, created_at, updated_at, last_sign_in_at)
VALUES
  (
    gen_random_uuid(),
    'aaaaaaaa-0009-0009-0009-000000000009',
    'therapist2@agenciapsi.com.br',
    'email',
    '{"sub": "aaaaaaaa-0009-0009-0009-000000000009", "email": "therapist2@agenciapsi.com.br", "email_verified": true}'::jsonb,
    now(), now(), now()
  ),
  (
    gen_random_uuid(),
    'aaaaaaaa-0010-0010-0010-000000000010',
    'therapist3@agenciapsi.com.br',
    'email',
    '{"sub": "aaaaaaaa-0010-0010-0010-000000000010", "email": "therapist3@agenciapsi.com.br", "email_verified": true}'::jsonb,
    now(), now(), now()
  ),
  (
    gen_random_uuid(),
    'aaaaaaaa-0011-0011-0011-000000000011',
    'secretary@agenciapsi.com.br',
    'email',
    '{"sub": "aaaaaaaa-0011-0011-0011-000000000011", "email": "secretary@agenciapsi.com.br", "email_verified": true}'::jsonb,
    now(), now(), now()
  )
ON CONFLICT (provider, provider_id) DO NOTHING;


-- ============================================================
-- 4. Profiles
-- ============================================================

INSERT INTO public.profiles (id, role, account_type, full_name)
VALUES
  (
    'aaaaaaaa-0009-0009-0009-000000000009',
    'tenant_member',
    'therapist',
    'Eva Terapeuta'
  ),
  (
    'aaaaaaaa-0010-0010-0010-000000000010',
    'tenant_member',
    'therapist',
    'Felipe Terapeuta'
  ),
  (
    'aaaaaaaa-0011-0011-0011-000000000011',
    'tenant_member',
    'therapist',
    'Gabriela Secretária'
  )
ON CONFLICT (id) DO UPDATE SET
  role         = EXCLUDED.role,
  account_type = EXCLUDED.account_type,
  full_name    = EXCLUDED.full_name;


-- ============================================================
-- 5. Tenants pessoais dos Terapeutas 2 e 3
-- ============================================================

INSERT INTO public.tenants (id, name, kind, created_at)
VALUES
  ('bbbbbbbb-0009-0009-0009-000000000009', 'Eva Terapeuta',    'therapist', now()),
  ('bbbbbbbb-0010-0010-0010-000000000010', 'Felipe Terapeuta', 'therapist', now())
ON CONFLICT (id) DO NOTHING;

-- Terapeuta 2 → tenant_admin do próprio tenant
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
VALUES (
  'bbbbbbbb-0009-0009-0009-000000000009',
  'aaaaaaaa-0009-0009-0009-000000000009',
  'tenant_admin', 'active', now()
)
ON CONFLICT (tenant_id, user_id) DO NOTHING;

-- Terapeuta 3 → tenant_admin do próprio tenant
INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
VALUES (
  'bbbbbbbb-0010-0010-0010-000000000010',
  'aaaaaaaa-0010-0010-0010-000000000010',
  'tenant_admin', 'active', now()
)
ON CONFLICT (tenant_id, user_id) DO NOTHING;


-- ============================================================
-- 6. Vincula Terapeutas 2 e 3 à Clínica 3 — Full
--    (mesmo padrão de terapeuta@agenciapsi.com.br no seed_001)
-- ============================================================

INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
VALUES
  (
    'bbbbbbbb-0005-0005-0005-000000000005',  -- Clínica Bem Estar (Full)
    'aaaaaaaa-0009-0009-0009-000000000009',  -- Eva Terapeuta
    'therapist', 'active', now()
  ),
  (
    'bbbbbbbb-0005-0005-0005-000000000005',  -- Clínica Bem Estar (Full)
    'aaaaaaaa-0010-0010-0010-000000000010',  -- Felipe Terapeuta
    'therapist', 'active', now()
  )
ON CONFLICT (tenant_id, user_id) DO NOTHING;


-- ============================================================
-- 7. Vincula Secretária à Clínica 2 (Recepção) como clinic_admin
--    A secretária gerencia a recepção/agenda da clínica.
--    Acessa a área /admin com o mesmo contexto de clinic_admin.
-- ============================================================

INSERT INTO public.tenant_members (tenant_id, user_id, role, status, created_at)
VALUES (
  'bbbbbbbb-0004-0004-0004-000000000004',  -- Clínica Mente Sã (Recepção)
  'aaaaaaaa-0011-0011-0011-000000000011',  -- Gabriela Secretária
  'clinic_admin', 'active', now()
)
ON CONFLICT (tenant_id, user_id) DO NOTHING;


-- ============================================================
-- 8. Subscriptions
--    Terapeutas 2 e 3 → therapist_free (escopo: user_id)
--    Secretária       → sem assinatura própria (usa o plano da Clínica 2)
-- ============================================================

-- Terapeuta 2 → therapist_free
INSERT INTO public.subscriptions (
  user_id, plan_id, plan_key, status, interval,
  current_period_start, current_period_end,
  source, started_at, activated_at
)
SELECT
  'aaaaaaaa-0009-0009-0009-000000000009',
  p.id, p.key, 'active', 'month',
  now(), now() + interval '30 days',
  'seed', now(), now()
FROM public.plans p WHERE p.key = 'therapist_free'
AND NOT EXISTS (
  SELECT 1 FROM public.subscriptions s
  WHERE s.user_id = 'aaaaaaaa-0009-0009-0009-000000000009' AND s.status = 'active'
);

-- Terapeuta 3 → therapist_free
INSERT INTO public.subscriptions (
  user_id, plan_id, plan_key, status, interval,
  current_period_start, current_period_end,
  source, started_at, activated_at
)
SELECT
  'aaaaaaaa-0010-0010-0010-000000000010',
  p.id, p.key, 'active', 'month',
  now(), now() + interval '30 days',
  'seed', now(), now()
FROM public.plans p WHERE p.key = 'therapist_free'
AND NOT EXISTS (
  SELECT 1 FROM public.subscriptions s
  WHERE s.user_id = 'aaaaaaaa-0010-0010-0010-000000000010' AND s.status = 'active'
);

-- Nota: a Secretária não tem assinatura própria.
-- O acesso vem do plano da Clínica 2 (tenant_id = bbbbbbbb-0004-0004-0004-000000000004).


-- ============================================================
-- 9. Confirma
-- ============================================================

DO $$
BEGIN
  RAISE NOTICE '✅ Seed 003 aplicado com sucesso.';
  RAISE NOTICE '';
  RAISE NOTICE '  Usuários criados:';
  RAISE NOTICE '  therapist2@agenciapsi.com.br  → tenant próprio (bbbbbbbb-0009) + Clínica 3 como therapist';
  RAISE NOTICE '  therapist3@agenciapsi.com.br  → tenant próprio (bbbbbbbb-0010) + Clínica 3 como therapist';
  RAISE NOTICE '  secretary@agenciapsi.com.br   → clinic_admin na Clínica 2 Mente Sã (bbbbbbbb-0004)';
  RAISE NOTICE '  Senha de todos: Teste@123';
END;
$$;

COMMIT;
