# task-621.3: 인슈로 플랜 관리 고도화 Phase 3 — 아누 시스템 연동 + 플랜 안내 페이지

## 프로젝트 경로
`/home/jay/projects/InsuRo/`

## 기술 스택
- React 18 + TypeScript + Vite
- shadcn-ui (Radix UI) + Tailwind CSS
- Supabase (PostgreSQL + Edge Functions)
- TanStack Query

## Phase 2 완료 산출물 (task-621.2)
- DB 마이그레이션: `supabase/migrations/20260316130000_token_system_and_ai_models.sql`
  - 5개 테이블: plan_token_config, feature_token_costs, user_tokens, token_usage_log, plan_ai_models
  - RLS 정책 10개 (각 테이블 SELECT + ALL)
  - 시드 데이터: 5플랜 토큰 할당량, 5플랜 AI 모델 매핑, 9개 기능×모델별 토큰 소비
  - `reset_monthly_tokens()` 함수 (월초 자동 리셋)
- `src/pages/AdminSubscriptions.tsx`: 4탭 구조로 확장 (기능 매트릭스 / 플랜 설정 / 기능 정의 관리 / 토큰·AI 모델)
  - 토큰 탭: 3섹션 (플랜별 토큰 할당량 / 기능별×모델별 소비량 / 플랜별 AI 모델 선택)
- `src/hooks/use-user-tokens.ts`: UserTokenInfo 훅 (잔여 토큰, 무제한 여부, 리셋일)
- `src/components/TokenBalance.tsx`: 잔여 토큰 표시 + 프로그레스 바 + 부족 시 업그레이드 유도
- `src/components/TokenUsageHistory.tsx`: 최근 20건 사용 이력 테이블

## Phase 3 목표
아누 시스템 연동 + 플랜 안내 페이지(Pricing.tsx) 동적 개편

---

### 3-1. AI Provider 모듈화 (아누 시스템 경로)
- `supabase/functions/_shared/ai-provider.ts` 수정:
  - 새 Provider 추가: `anu-system` (아누 시스템 직접 호출)
  - 인터페이스 추상화:
    ```typescript
    interface AIProviderRequest {
      prompt: string;
      model_tier: string;  // 플랜에서 결정된 모델 (haiku/sonnet/opus)
      feature_key: string;
      user_id: string;
    }

    interface AIProvider {
      generate(req: AIProviderRequest): Promise<AIProviderResponse>;
    }
    ```
  - 아누 시스템 Provider: 리눅스 서버 HTTP 호출
  - 나중에 외부 API Provider로 전환 가능한 구조
- AI 호출 플로우:
  ```
  사용자 요청 → 플랜 확인 → 모델 결정 → 토큰 차감 → AI Provider 호출 → 응답
  ```
- Phase 2에서 생성한 `plan_ai_models` 테이블에서 모델 tier 조회하여 사용

### 3-2. 아누 시스템 수신 엔드포인트
- `/home/jay/projects/InsuRo/server/` 또는 별도 경로에:
  - 인슈로→아누 시스템 요청을 받는 API 엔드포인트
  - 인증 (API Key 기반)
  - 모델 라우팅 (model_tier에 따라 Haiku/Sonnet/Opus)
  - 응답 반환
- **모듈화 핵심**: Provider 인터페이스만 바꾸면 아누→외부 API 전환 가능

### 3-3. Pricing.tsx 동적 개편
- 현재: 하드코딩된 2개 플랜 비교
- 변경:
  - DB에서 활성+공개 플랜 동적 로드 (히든 제외, 4개만 표시)
  - 관리자가 매트릭스에서 체크한 기능이 **자동으로 안내 페이지에 반영**
  - 4열 비교 테이블 (무료/베이직/프로/맥스)
  - 기능 행: feature_definitions에서 카테고리별 그룹
  - 셀: Boolean → ✓/✗, Number → 숫자 표시
  - Phase 2에서 생성한 `plan_token_config` 테이블에서 토큰 할당량 표시
  - Phase 2에서 생성한 `plan_ai_models` 테이블에서 AI 모델 등급 표시 (예: "기본 AI" / "고급 AI" / "최고급 AI")
  - 가격 표시 (월간/연간 토글 유지)
- CTA: 각 플랜별 "시작하기" 버튼

### 3-4. PlanUpgradeDialog 업데이트
- 5개 플랜 체계 반영
- Phase 2의 토큰 정보 표시 (useUserTokens 훅 활용)
- AI 모델 등급 안내

## 참조 파일
- `/home/jay/projects/InsuRo/src/pages/Pricing.tsx` — 안내 페이지
- `/home/jay/projects/InsuRo/src/components/PlanUpgradeDialog.tsx` — 업그레이드 다이얼로그
- `/home/jay/projects/InsuRo/supabase/functions/_shared/ai-provider.ts` — AI Provider (현재)
- `/home/jay/projects/InsuRo/src/hooks/use-user-tokens.ts` — Phase 2 토큰 훅
- `/home/jay/projects/InsuRo/src/components/TokenBalance.tsx` — Phase 2 토큰 잔액 컴포넌트
- `/home/jay/projects/InsuRo/supabase/migrations/20260316130000_token_system_and_ai_models.sql` — Phase 2 DB
- 마스터플랜: `/home/jay/workspace/memory/tasks/task-621.1.md` (Phase 3 섹션)

## 공통 규칙
- InsuRo 프로젝트는 `/home/jay/projects/InsuRo/`에 위치
- Supabase 마이그레이션은 `supabase/migrations/` 아래에 타임스탬프 prefix로 생성
- 기존 컴포넌트/훅 스타일과 일관성 유지 (shadcn-ui, TanStack Query)
- RLS 정책 반드시 설정
- TypeScript strict mode 준수

## 보고서
- 경로: `/home/jay/workspace/memory/reports/task-621.3.md`
- 완료: `bash /home/jay/workspace/scripts/finish-task.sh task-621.3`
