import base64

import anthropic
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile

from app.config import settings
from app.deps import get_current_user

router = APIRouter(prefix="/pdf", tags=["pdf"])

SYSTEM_PROMPT = """Kamu adalah asisten yang membantu meringkas dokumen kontrak.
Buat ringkasan dalam Bahasa Indonesia yang jelas dan terstruktur."""

SUMMARIZE_PROMPT = """Tolong buat ringkasan dari kontrak ini. Sertakan:
- Pihak-pihak yang terlibat
- Tujuan/objek kontrak
- Nilai/nominal (jika ada)
- Jangka waktu (jika ada)
- Kewajiban utama masing-masing pihak
- Poin-poin penting lainnya

Tulis ringkasan dalam paragraf yang mudah dibaca."""


@router.post("/summarize")
async def summarize_pdf(
    file: UploadFile = File(...),
    _: dict = Depends(get_current_user),
):
    if file.content_type not in ("application/pdf", "application/octet-stream"):
        raise HTTPException(status_code=400, detail="File harus berformat PDF")

    pdf_bytes = await file.read()
    if len(pdf_bytes) > 30 * 1024 * 1024:
        raise HTTPException(status_code=400, detail="File terlalu besar (maks 30MB)")

    client = anthropic.Anthropic(api_key=settings.ANTHROPIC_API_KEY)
    b64_data = base64.standard_b64encode(pdf_bytes).decode()

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=4096,
        system=SYSTEM_PROMPT,
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "document",
                        "source": {
                            "type": "base64",
                            "media_type": "application/pdf",
                            "data": b64_data,
                        },
                    },
                    {"type": "text", "text": SUMMARIZE_PROMPT},
                ],
            }
        ],
    )

    summary = next(
        (block.text for block in response.content if block.type == "text"), ""
    )
    return {"summary": summary}
