"""
Load job efficiency data from branch-specific CSV files.
"""
import csv
from pathlib import Path
from typing import Dict, List


def load_job_efficiency_by_branch() -> Dict[str, List[dict]]:
    """Load job efficiency from branch-specific CSVs.
    Returns { branchName: [{ employee, ratio, ... }] }."""
    data_dir = Path(__file__).resolve().parent.parent.parent.parent / "data"
    branch_files = {
        "Bunbury": "job-efficiency-bunbury.csv",
        "Busselton": "job-efficiency-busselton.csv",
        "Mandurah": "job-efficiency-mandurah.csv",
    }
    result = {}
    for branch_name, filename in branch_files.items():
        csv_path = data_dir / filename
        rows = []
        try:
            if csv_path.exists():
                with open(csv_path, encoding="utf-8") as f:
                    reader = csv.DictReader(f)
                    for row in reader:
                        emp = (row.get("Employee") or "").strip()
                        if not emp:
                            continue
                        ratio = 0.0
                        billable_raw = (row.get("Billable / Actual Ratio") or "").strip()
                        income_raw = (row.get("Income / Cost Ratio") or "").strip()
                        if billable_raw:
                            try:
                                ratio = float(billable_raw)
                            except (ValueError, TypeError):
                                pass
                        elif income_raw:
                            try:
                                ratio = float(income_raw)
                            except (ValueError, TypeError):
                                pass
                        period = (row.get("Period") or "").strip()
                        rows.append(
                            {"employee": emp, "ratio": round(ratio, 2), "period": period}
                        )
                # If CSV has multiple periods per employee, keep the latest period only.
                if rows and any(r.get("period") for r in rows):
                    by_emp: Dict[str, dict] = {}
                    for r in rows:
                        emp = r["employee"]
                        p = r.get("period") or ""
                        prev = by_emp.get(emp)
                        if prev is None or p > (prev.get("period") or ""):
                            by_emp[emp] = r
                    rows = [
                        {"employee": r["employee"], "ratio": r["ratio"]}
                        for r in by_emp.values()
                    ]
                else:
                    rows = [{"employee": r["employee"], "ratio": r["ratio"]} for r in rows]
        except Exception:
            pass
        result[branch_name] = rows if rows else []
    return result


def load_job_efficiency_for_branch(branch_name: str) -> List[dict]:
    """Load job efficiency for a single branch. Returns empty list if branch unknown or no data."""
    all_data = load_job_efficiency_by_branch()
    return all_data.get(branch_name, [])
