-- Supabase에서 실행할 SQL
-- EPL 트윗 테이블 생성

CREATE TABLE IF NOT EXISTS tweets (
  id TEXT PRIMARY KEY,
  content TEXT NOT NULL,
  author TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  hashtags JSONB DEFAULT '[]'::jsonb,
  keywords JSONB DEFAULT '[]'::jsonb,
  retweet_count INTEGER DEFAULT 0,
  like_count INTEGER DEFAULT 0,
  category TEXT CHECK(category IN ('match', 'player', 'club', 'director', 'transfer')) NOT NULL,
  team_mentions JSONB DEFAULT '[]'::jsonb,
  player_mentions JSONB DEFAULT '[]'::jsonb,
  director_mentions JSONB DEFAULT '[]'::jsonb,
  
  -- 추가 필드들 (옵션)
  url TEXT,
  image_urls JSONB DEFAULT '[]'::jsonb,
  reply_count INTEGER DEFAULT 0,
  quote_count INTEGER DEFAULT 0,
  engagement INTEGER GENERATED ALWAYS AS (retweet_count + like_count + reply_count) STORED
);

-- 인덱스 생성
CREATE INDEX IF NOT EXISTS idx_tweets_created_at ON tweets(created_at);
CREATE INDEX IF NOT EXISTS idx_tweets_category ON tweets(category);
CREATE INDEX IF NOT EXISTS idx_tweets_engagement ON tweets(engagement);
CREATE INDEX IF NOT EXISTS idx_tweets_content_search ON tweets USING GIN(to_tsvector('english', content));

-- JSONB 컬럼 인덱스
CREATE INDEX IF NOT EXISTS idx_tweets_hashtags ON tweets USING GIN(hashtags);
CREATE INDEX IF NOT EXISTS idx_tweets_keywords ON tweets USING GIN(keywords);
CREATE INDEX IF NOT EXISTS idx_tweets_team_mentions ON tweets USING GIN(team_mentions);
CREATE INDEX IF NOT EXISTS idx_tweets_player_mentions ON tweets USING GIN(player_mentions);

-- RLS (Row Level Security) 설정 (선택사항)
ALTER TABLE tweets ENABLE ROW LEVEL SECURITY;

-- 모든 사용자가 읽기 가능하도록 정책 생성
CREATE POLICY "Enable read access for all users" ON tweets
FOR SELECT USING (true);

-- 인증된 사용자만 쓰기 가능하도록 정책 생성 (필요한 경우)
CREATE POLICY "Enable insert for authenticated users only" ON tweets
FOR INSERT WITH CHECK (auth.role() = 'authenticated');

-- 샘플 데이터 삽입
INSERT INTO tweets (id, content, author, created_at, hashtags, keywords, retweet_count, like_count, category, team_mentions, player_mentions, director_mentions) 
VALUES 
(
  'sample_supabase_1',
  '손흥민이 오늘 경기에서 해트트릭을 기록했습니다! 정말 놀라운 경기력 👏 #TOTMUN #손흥민 #PremierLeague #Hattrick',
  'spurs_fan_official',
  '2024-06-28 15:30:00+00',
  '["TOTMUN", "손흥민", "PremierLeague", "Hattrick"]',
  '["hattrick", "goal", "performance", "amazing"]',
  287,
  1543,
  'player',
  '["Tottenham", "Manchester United"]',
  '["손흥민", "Son Heung-min"]',
  '[]'
),
(
  'sample_supabase_2', 
  '🚨 BREAKING: 아스날이 브라이튼의 미드필더와 계약에 합의했다는 소식입니다. 이적료는 4천5백만 파운드로 알려졌습니다 #Arsenal #TransferNews #EPL',
  'transfer_expert_uk',
  '2024-06-28 12:00:00+00',
  '["Arsenal", "TransferNews", "EPL", "Brighton"]', 
  '["transfer", "signing", "midfielder", "agreement"]',
  156,
  892,
  'transfer',
  '["Arsenal", "Brighton"]',
  '[]',
  '[]'
),
(
  'sample_supabase_3',
  '과르디올라: "우리는 다음 시즌을 위해 새로운 시스템을 준비하고 있습니다. 선수들이 더 창의적으로 플레이할 수 있도록 하는 것이 목표입니다" #ManCity #Guardiola #Tactics',
  'city_press_official',
  '2024-06-28 10:15:00+00',
  '["ManCity", "Guardiola", "Tactics"]',
  '["press conference", "tactics", "strategy", "creative", "system"]',
  98,
  445,
  'director', 
  '["Manchester City"]',
  '[]',
  '["Guardiola", "Pep Guardiola"]'
),
(
  'sample_supabase_4',
  '리버풀 vs 첼시 경기 리뷰: 살라의 결승골로 2-1 승리! 클롭의 전술이 빛을 발한 경기였습니다 ⚽️🔴 #LFC #CFC #PremierLeague',
  'lfc_analysis',
  '2024-06-27 20:30:00+00',
  '["LFC", "CFC", "PremierLeague"]',
  '["match review", "victory", "goal", "tactics"]',
  234,
  1189,
  'match',
  '["Liverpool", "Chelsea"]',
  '["Salah", "Mohamed Salah"]',
  '["Klopp", "Jurgen Klopp"]'
);