# task-646.1: InsuRo 프론트엔드 — 플랜 기반 AI 모델 셀렉터

## 목표
AI 콘텐츠 생성 화면에서 모델 선택이 사용자의 구독 플랜에 따라 자동 연동되어야 함.
현재는 하드코딩된 Gemini 모델 4개가 플랜 무관하게 노출됨 → 플랜별 허용 모델만 표시.

## 현재 상태 분석

### 프론트엔드 모델 목록 (하드코딩)
- 파일: `src/data/generateOptions.ts` (454-461줄)
- Gemini 3 Flash, Gemini 3.1 Pro, Gemini 2.5 Flash, Gemini 2.5 Pro 4개만 존재
- Claude 모델 없음, 플랜 필터링 없음

### 설정 패널
- 파일: `src/components/GenerateSettingsPanel.tsx`
- 모델 셀렉터가 있지만 플랜 조회 없이 전체 모델 노출

### 생성 페이지
- 파일: `src/pages/Generate.tsx` (104-122줄)
- `/functions/v1/generate-content` Edge Function 호출
- settings.aiModel로 모델 전달

### DB 구조 (이미 존재)
- `plan_ai_models` 테이블: plan_id + feature_key + model_tier + model_name
- `plan_token_config` 테이블: plan_id + monthly_token_quota
- `feature_token_costs` 테이블: feature_key + model_tier + token_cost
- 플랜별 model_tier: 무료=haiku, 베이직=sonnet, 프로=sonnet, 맥스=opus, 히든=opus

## 작업 내용

### 1. 유저 플랜 정보 조회 훅 생성
- `src/hooks/usePlanFeatures.ts` (신규)
- 현재 로그인 유저의 구독 플랜 조회 (user_subscriptions → subscription_plans)
- `plan_ai_models`에서 허용 모델 티어 조회
- `plan_token_config`에서 월간 토큰 한도 조회
- 반환: `{ planName, modelTier, allowedModels, monthlyQuota, usedTokens }`

### 2. 모델 목록 동적 생성
- `src/data/generateOptions.ts` 수정
- 하드코딩 모델 목록 → 티어별 모델 매핑 구조로 변경
```
haiku 티어: Gemini 2.5 Flash (경량)
sonnet 티어: Gemini 2.5 Flash + Gemini 2.5 Pro
opus 티어: Gemini 2.5 Flash + Gemini 2.5 Pro + Claude Sonnet
```
- 내 플랜 티어 이상 모델은 잠금(🔒) 표시 + "업그레이드 필요" 안내

### 3. GenerateSettingsPanel 수정
- `src/components/GenerateSettingsPanel.tsx` 수정
- usePlanFeatures 훅 사용
- 허용 모델만 선택 가능, 상위 모델은 disabled + 잠금 아이콘
- 현재 플랜 이름 표시 (예: "프로 플랜")
- 토큰 잔량 표시 (예: "이번 달 토큰: 1,850 / 2,000")

### 4. 기본 모델 자동 설정
- 플랜의 model_tier에 해당하는 최고 모델을 기본값으로 자동 선택
- 유저가 수동으로 하위 모델 선택은 허용 (토큰 절약)

## 주의사항
- 2팀이 백엔드(generate-content Edge Function) 수정 중 — 프론트엔드만 담당
- Edge Function 호출 인터페이스(request/response)는 변경하지 말 것
- settings.aiModel 필드로 모델명 전달하는 구조 유지
- 구독 없는 유저 = 무료 플랜(haiku 티어) 기본 적용
- RLS 정책 확인 필요: anon/authenticated role의 plan_ai_models, plan_token_config 읽기 권한

## 검증
- 무료 유저: Gemini Flash만 선택 가능, Pro/Claude 잠금 표시
- 프로 유저: Flash + Pro 선택 가능, Claude 잠금
- 맥스 유저: 전체 모델 선택 가능
- 토큰 잔량 정상 표시
- 비로그인 시 기본(무료) 모델만 표시