#!/usr/bin/env python3
"""Cria as tabelas VSL no Supabase via REST API."""
import requests
import json

SUPABASE_URL = "https://qrweeonylthrcbbalkwn.supabase.co"
SERVICE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFyd2Vlb255bHRocmNiYmFsa3duIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3NDE3ODY4NywiZXhwIjoyMDg5NzU0Njg3fQ.RPh6CBasd2_JLQi5B5mwYCwIySFim-jJThSGipaYCd4"

headers = {
    "apikey": SERVICE_KEY,
    "Authorization": f"Bearer {SERVICE_KEY}",
    "Content-Type": "application/json"
}

# SQL statements separados
statements = [
    """
    create table if not exists public.sessoes_vsl (
      id uuid default uuid_generate_v4() primary key,
      usuario_id uuid references public.profiles(id) on delete cascade,
      titulo text not null default 'Nova VSL',
      status text default 'entrevista' check (status in ('entrevista','gerando','concluida')),
      dados_coletados jsonb default '{}',
      criado_em timestamptz default now(),
      atualizado_em timestamptz default now()
    )
    """,
    """
    create table if not exists public.mensagens_vsl (
      id uuid default uuid_generate_v4() primary key,
      sessao_id uuid references public.sessoes_vsl(id) on delete cascade,
      role text not null check (role in ('user','assistant')),
      content text not null,
      criado_em timestamptz default now()
    )
    """,
    "alter table public.sessoes_vsl enable row level security",
    "alter table public.mensagens_vsl enable row level security",
    # Policies com IF NOT EXISTS via DO block
    """
    DO $$ BEGIN
      IF NOT EXISTS (
        SELECT 1 FROM pg_policies WHERE tablename = 'sessoes_vsl' AND policyname = 'Usuario ve suas sessoes'
      ) THEN
        CREATE POLICY "Usuario ve suas sessoes" ON public.sessoes_vsl FOR SELECT USING (auth.uid() = usuario_id);
      END IF;
    END $$
    """,
    """
    DO $$ BEGIN
      IF NOT EXISTS (
        SELECT 1 FROM pg_policies WHERE tablename = 'sessoes_vsl' AND policyname = 'Usuario cria sessoes'
      ) THEN
        CREATE POLICY "Usuario cria sessoes" ON public.sessoes_vsl FOR INSERT WITH CHECK (auth.uid() = usuario_id);
      END IF;
    END $$
    """,
    """
    DO $$ BEGIN
      IF NOT EXISTS (
        SELECT 1 FROM pg_policies WHERE tablename = 'sessoes_vsl' AND policyname = 'Usuario atualiza sessoes'
      ) THEN
        CREATE POLICY "Usuario atualiza sessoes" ON public.sessoes_vsl FOR UPDATE USING (auth.uid() = usuario_id);
      END IF;
    END $$
    """,
    """
    DO $$ BEGIN
      IF NOT EXISTS (
        SELECT 1 FROM pg_policies WHERE tablename = 'sessoes_vsl' AND policyname = 'Usuario deleta sessoes'
      ) THEN
        CREATE POLICY "Usuario deleta sessoes" ON public.sessoes_vsl FOR DELETE USING (auth.uid() = usuario_id);
      END IF;
    END $$
    """,
    """
    DO $$ BEGIN
      IF NOT EXISTS (
        SELECT 1 FROM pg_policies WHERE tablename = 'mensagens_vsl' AND policyname = 'Usuario ve mensagens'
      ) THEN
        CREATE POLICY "Usuario ve mensagens" ON public.mensagens_vsl FOR SELECT USING (
          exists (select 1 from public.sessoes_vsl s where s.id = sessao_id and s.usuario_id = auth.uid())
        );
      END IF;
    END $$
    """,
    """
    DO $$ BEGIN
      IF NOT EXISTS (
        SELECT 1 FROM pg_policies WHERE tablename = 'mensagens_vsl' AND policyname = 'Usuario cria mensagens'
      ) THEN
        CREATE POLICY "Usuario cria mensagens" ON public.mensagens_vsl FOR INSERT WITH CHECK (
          exists (select 1 from public.sessoes_vsl s where s.id = sessao_id and s.usuario_id = auth.uid())
        );
      END IF;
    END $$
    """,
]

print("Executando SQL no Supabase...")
for i, sql in enumerate(statements, 1):
    resp = requests.post(
        f"{SUPABASE_URL}/rest/v1/rpc/exec_sql",
        headers=headers,
        json={"sql": sql.strip()}
    )
    if resp.status_code not in (200, 201, 204):
        # Tenta via query endpoint alternativo
        resp2 = requests.post(
            f"{SUPABASE_URL}/rest/v1/rpc/exec",
            headers=headers,
            json={"query": sql.strip()}
        )
        if resp2.status_code not in (200, 201, 204):
            print(f"  [{i}/{len(statements)}] ERRO: {resp.status_code} - {resp.text[:200]}")
        else:
            print(f"  [{i}/{len(statements)}] OK (via exec)")
    else:
        print(f"  [{i}/{len(statements)}] OK")

print("\nVerificando se tabelas existem...")
resp = requests.get(
    f"{SUPABASE_URL}/rest/v1/sessoes_vsl?limit=1",
    headers=headers
)
if resp.status_code == 200:
    print("Tabela sessoes_vsl: OK")
else:
    print(f"Tabela sessoes_vsl: {resp.status_code} - {resp.text[:200]}")

resp = requests.get(
    f"{SUPABASE_URL}/rest/v1/mensagens_vsl?limit=1",
    headers=headers
)
if resp.status_code == 200:
    print("Tabela mensagens_vsl: OK")
else:
    print(f"Tabela mensagens_vsl: {resp.status_code} - {resp.text[:200]}")
