"""CSV / REDCap-style ingest + de-identification.

All inputs are flat CSV files. PHI columns (name, RRN, MRN) are dropped if present.
"""
from __future__ import annotations
import csv
import os
from typing import Dict, List, Optional


PHI_COLS = {"name", "rrn", "patient_name", "korean_name",
            "phone", "address", "mrn", "ssn"}


def _read_csv(path: str) -> List[Dict[str, str]]:
    with open(path, newline="", encoding="utf-8") as fh:
        reader = csv.DictReader(fh)
        return list(reader)


def deidentify(rows: List[Dict[str, str]]) -> List[Dict[str, str]]:
    out = []
    for r in rows:
        cleaned = {k: v for k, v in r.items() if k.lower() not in PHI_COLS}
        out.append(cleaned)
    return out


def load_patients(data_dir: str) -> List[Dict[str, str]]:
    return deidentify(_read_csv(os.path.join(data_dir, "patients.csv")))


def load_episodes(data_dir: str) -> List[Dict[str, str]]:
    return deidentify(_read_csv(os.path.join(data_dir, "episodes.csv")))


def load_labs(data_dir: str) -> List[Dict[str, str]]:
    return deidentify(_read_csv(os.path.join(data_dir, "lab_trajectory.csv")))


def load_protocol_adherence(data_dir: str) -> List[Dict[str, str]]:
    return deidentify(_read_csv(os.path.join(data_dir, "protocol_adherence.csv")))


def load_lt_waitlist(data_dir: str) -> List[Dict[str, str]]:
    return deidentify(_read_csv(os.path.join(data_dir, "lt_waitlist.csv")))


def load_outcomes(data_dir: str) -> List[Dict[str, str]]:
    return deidentify(_read_csv(os.path.join(data_dir, "outcomes.csv")))


def quick_summary(data_dir: str) -> Dict[str, int]:
    pat = load_patients(data_dir)
    epi = load_episodes(data_dir)
    return {
        "patients": len(pat),
        "episodes": len(epi),
        "etiology_masld": sum(1 for p in pat if p.get("etiology") == "MASLD"),
        "etiology_hbv": sum(1 for p in pat if p.get("etiology") == "HBV"),
        "etiology_alcohol": sum(1 for p in pat if p.get("etiology") == "alcohol"),
    }
