# Task-507.2: InsuRo AdminFcpa 프론트엔드 수정 — 서버 프록시 연동

## 목표
AdminFcpa 페이지의 PDF 업로드를 Supabase Storage 대신 우리 서버 프록시 API(포트 8001)로 전환.
PDF 업로드하면 AI가 자동으로 금소법 핵심사항을 추출하여 summary + checklist를 채워넣는 UX 구현.

## 배경
- Phase 1(task-507.1, 1팀)에서 서버 프록시 API 구축 완료
- `/home/jay/projects/InsuRo/server/main.py` — FastAPI 서버 (포트 8001)
- API 엔드포인트: `POST /api/insuro/fcpa/upload` (multipart/form-data)
- 응답: `{ status, pdf_url, summary, checklist[] }`

## 수정 대상 파일
`/home/jay/projects/InsuRo/src/pages/AdminFcpa.tsx`

## 현재 동작 (변경 전)
1. PDF 선택 → Supabase Storage(`fcpa-docs`) 업로드
2. 공개 URL만 받아서 `pdfUrl` state에 저장
3. summary, checklist는 관리자가 수동 입력
4. "전체 저장 및 적용" 버튼 → Supabase DB `fcpa_config` upsert

## 변경 후 동작
1. PDF 선택 → **우리 서버** `POST http://100.76.130.39:8001/api/insuro/fcpa/upload` 전송
2. 서버가 Google Drive 저장 + Claude Sonnet 분석 수행
3. 응답에서 `pdf_url`, `summary`, `checklist` 수신
4. 자동으로 summary 텍스트 에디터, checklist 항목에 채워넣기
5. 관리자가 검토/수정 후 "전체 저장 및 적용" → Supabase DB 저장 (기존 로직 유지)

## 구현 상세

### handlePdfUpload 함수 수정

```typescript
const handlePdfUpload = async (e: React.ChangeEvent<HTMLInputElement>) => {
  const file = e.target.files?.[0];
  if (!file) return;
  if (file.type !== "application/pdf") {
    toast({ title: "PDF 파일만 업로드 가능합니다", variant: "destructive" });
    return;
  }
  setUploading(true);
  try {
    // Supabase JWT 토큰 가져오기
    const { data: { session } } = await supabase.auth.getSession();
    if (!session) throw new Error("로그인이 필요합니다");

    const formData = new FormData();
    formData.append("file", file);

    // 우리 서버 프록시로 전송
    const API_BASE = import.meta.env.VITE_INSURO_API_URL || "http://100.76.130.39:8001";
    const res = await fetch(`${API_BASE}/api/insuro/fcpa/upload`, {
      method: "POST",
      headers: {
        Authorization: `Bearer ${session.access_token}`,
      },
      body: formData,
    });

    if (!res.ok) {
      const err = await res.json();
      throw new Error(err.detail || "업로드 실패");
    }

    const result = await res.json();

    // 결과 자동 채우기
    setPdfUrl(result.pdf_url);
    if (result.summary) setSummary(result.summary);
    if (result.checklist && result.checklist.length > 0) {
      setChecklist(result.checklist);
    }

    toast({ title: "PDF 업로드 + AI 분석 완료", description: "금소법 핵심사항이 자동 추출되었습니다. 검토 후 저장해주세요." });
  } catch (err: any) {
    toast({ title: "업로드/분석 실패", description: err.message, variant: "destructive" });
  } finally {
    setUploading(false);
  }
};
```

### UI 변경
1. 업로드 버튼 텍스트: "새 PDF 업로드" → **"PDF 업로드 + AI 분석"**
2. 업로드 중 텍스트: "업로드 중..." → **"AI 분석 중... (약 30초)"**
3. 업로드 완료 후 토스트: "PDF 업로드 완료" → **"PDF 업로드 + AI 분석 완료"**
4. summary/checklist 영역에 변경 하이라이트 (선택사항)

### 환경변수 추가
- `.env` 파일에 `VITE_INSURO_API_URL=http://100.76.130.39:8001` 추가 (fallback 있으므로 선택사항)

### Supabase DB 저장 (handleSave)
- 기존 `handleSave` 로직은 그대로 유지 — 관리자가 검토 후 "전체 저장 및 적용" 누르면 Supabase DB에 저장
- Supabase DB upsert 로직은 프론트엔드에서 직접 수행 (기존 코드 유지)

## 테스트 계획
1. PDF 업로드 → 서버 응답 확인 (summary, checklist 자동 채워짐)
2. 서버 미응답 시 에러 토스트 표시
3. 비PDF 파일 업로드 시 거부
4. AI 분석 결과 검토 후 수동 수정 가능 확인
5. "전체 저장 및 적용" → Supabase DB 정상 저장 확인

## 주의사항
- Supabase Storage 관련 코드 (기존 `supabase.storage.from("fcpa-docs")`)는 제거
- CORS: 서버(8001)에서 이미 프론트엔드 origin 허용 설정 완료
- 서버가 다운됐을 때의 에러 핸들링 필수

## 산출물
- `/home/jay/projects/InsuRo/src/pages/AdminFcpa.tsx` (수정)