from __future__ import annotations

from pathlib import Path

from ..utils.json_utils import read_json, write_json
from ..utils.time_utils import now_iso


class ReportService:
    """Creates markdown/json report outputs for downstream review and prompting."""

    def generate_cv(self, applicant_base: Path) -> Path:
        applicant = read_json(applicant_base / "applicant.json", default={}) or {}
        output = applicant_base / "generated" / "cv.md"
        body = "\n".join(
            [
                "# Applicant CV (Draft)",
                "",
                f"Name: {applicant.get('full_name') or 'TBD'}",
                f"Nominated Occupation: {applicant.get('nominated_occupation') or 'TBD'}",
                "",
                "## Professional Summary",
                "- Add manually verified summary based on processed evidence.",
                "",
                "## Employment History",
                "- Populate from verified employment records.",
                "",
                "## Education",
                "- Populate from verified qualifications.",
            ]
        )
        output.write_text(body + "\n", encoding="utf-8")
        return output

    def generate_gap_report(self, applicant_base: Path) -> Path:
        timeline = read_json(applicant_base / "generated" / "timeline.json", default={}) or {}
        output = applicant_base / "generated" / "gap_report.md"
        events = timeline.get("events", [])
        lines = [
            "# Gap Report",
            "",
            "Potential chronology/data gaps for manual review:",
            "- No date-normalized extraction in V1.",
            f"- Events available: {len(events)}",
        ]
        output.write_text("\n".join(lines) + "\n", encoding="utf-8")
        return output

    def generate_chatgpt_pack(self, applicant_base: Path) -> Path:
        applicant = read_json(applicant_base / "applicant.json", default={}) or {}
        checklist = read_json(applicant_base / "generated" / "checklist.json", default={}) or {}
        occupation = read_json(applicant_base / "generated" / "occupation_analysis.json", default={}) or {}

        pack = {
            "generated_at": now_iso(),
            "applicant": applicant,
            "checklist": checklist,
            "occupation_analysis": occupation,
            "instructions": {
                "goal": "Prepare draft support notes for sponsor visa evidence workflow.",
                "constraints": [
                    "Do not provide legal advice.",
                    "Do not imply approval outcomes.",
                    "Separate verified evidence, inferred suggestions, and missing evidence.",
                ],
            },
        }

        json_output = applicant_base / "generated" / "chatgpt_briefing_pack.json"
        write_json(json_output, pack)

        md_output = applicant_base / "generated" / "chatgpt_briefing_pack.md"
        md_output.write_text(
            "\n".join(
                [
                    "# ChatGPT Briefing Pack",
                    "",
                    "Use this pack for drafting support notes only.",
                    "",
                    "## Guardrails",
                    "- Not legal advice.",
                    "- Not a visa decision tool.",
                    "- Keep verified/inferred/missing evidence explicitly separated.",
                    "",
                    f"## Applicant\n- ID: {applicant.get('applicant_id', 'unknown')}",
                    f"- Name: {applicant.get('full_name', 'TBD')}",
                ]
            )
            + "\n",
            encoding="utf-8",
        )
        return md_output
