-- Script para criar tabela de sessões múltiplas
-- Executar no banco de dados PostgreSQL

-- Criar tabela de sessões
CREATE TABLE IF NOT EXISTS public.account_sessions (
  id SERIAL PRIMARY KEY,
  account_id INTEGER NOT NULL,
  token VARCHAR(64) NOT NULL UNIQUE,
  
  -- Informações do dispositivo
  device_type VARCHAR(50),        -- 'desktop', 'mobile', 'tablet'
  device_os VARCHAR(100),         -- 'Windows 10', 'macOS', 'Android', 'iOS', 'Linux'
  browser VARCHAR(100),           -- 'Chrome 120', 'Firefox 121', 'Safari 17'
  user_agent TEXT,                -- User-Agent completo para referência
  
  -- Informações de rede
  ip_address VARCHAR(45),         -- Suporta IPv6

  -- Geolocalização (Cloudflare Worker headers)
  cf_country VARCHAR(8),
  cf_city TEXT,
  cf_region TEXT,
  cf_timezone TEXT,
  cf_asn TEXT,
  
  -- Timestamps
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  last_used_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  expires_at TIMESTAMP WITH TIME ZONE,
  
  -- Foreign key
  CONSTRAINT fk_account_sessions_account
    FOREIGN KEY (account_id) 
    REFERENCES public.accounts(id) 
    ON DELETE CASCADE
);

-- Índices para performance
CREATE INDEX IF NOT EXISTS idx_account_sessions_token ON public.account_sessions(token);
CREATE INDEX IF NOT EXISTS idx_account_sessions_account_id ON public.account_sessions(account_id);
CREATE INDEX IF NOT EXISTS idx_account_sessions_expires_at ON public.account_sessions(expires_at);

-- Comentários
COMMENT ON TABLE public.account_sessions IS 'Sessões ativas dos usuários para suporte a múltiplos dispositivos';
COMMENT ON COLUMN public.account_sessions.token IS 'Token único da sessão (armazenado no JWT)';
COMMENT ON COLUMN public.account_sessions.device_type IS 'Tipo: desktop, mobile, tablet';
COMMENT ON COLUMN public.account_sessions.device_os IS 'Sistema operacional detectado';
COMMENT ON COLUMN public.account_sessions.browser IS 'Navegador e versão';
COMMENT ON COLUMN public.account_sessions.last_used_at IS 'Última vez que a sessão foi utilizada';
COMMENT ON COLUMN public.account_sessions.cf_country IS 'País (Cloudflare CF-IPCountry)';
COMMENT ON COLUMN public.account_sessions.cf_city IS 'Cidade (Cloudflare Worker header X-CF-City)';
COMMENT ON COLUMN public.account_sessions.cf_region IS 'Região/Estado (Cloudflare Worker header X-CF-Region)';
COMMENT ON COLUMN public.account_sessions.cf_timezone IS 'Timezone (Cloudflare Worker header X-CF-Timezone)';
COMMENT ON COLUMN public.account_sessions.cf_asn IS 'ASN (Cloudflare Worker header X-CF-ASN)';
