# -*- coding: utf-8 -*-
"""撮影品質で絞った場合にモデル精度が改善するか確認する。"""
import argparse
import subprocess
import sys
from pathlib import Path

import pandas as pd


ROOT = Path(__file__).resolve().parents[2]
DEFAULT_FEATURES = ROOT / "検証" / "data" / "features.csv"
DEFAULT_FILTERED = ROOT / "検証" / "data" / "features_quality_filtered.csv"
DEFAULT_SPLIT_DIR = ROOT / "検証" / "data" / "quality_filtered_splits"
DEFAULT_OUTPUT = ROOT / "検証" / "results" / "comparison_quality_filtered.csv"


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--features", type=Path, default=DEFAULT_FEATURES)
    parser.add_argument("--quality-col", default="image_condition_score")
    parser.add_argument("--min-quality", type=float, default=3)
    parser.add_argument("--dim-cols", nargs="+", required=True)
    parser.add_argument("--target", default="target")
    parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)
    args = parser.parse_args()

    df = pd.read_csv(args.features)
    if args.quality_col not in df.columns:
        raise ValueError(f"画質列がありません: {args.quality_col}")
    filtered = df[pd.to_numeric(df[args.quality_col], errors="coerce") >= args.min_quality].copy()
    DEFAULT_FILTERED.parent.mkdir(parents=True, exist_ok=True)
    filtered.to_csv(DEFAULT_FILTERED, index=False, encoding="utf-8-sig")
    print(f"quality filtered rows: {len(filtered)} / {len(df)}")

    split_script = ROOT / "検証" / "scripts" / "make_splits.py"
    run_script = ROOT / "検証" / "scripts" / "run_comparison.py"
    subprocess.run([sys.executable, str(split_script), "--input", str(DEFAULT_FILTERED), "--outdir", str(DEFAULT_SPLIT_DIR), "--seed", "42"], check=True)
    subprocess.run([
        sys.executable,
        str(run_script),
        "--features",
        str(DEFAULT_FILTERED),
        "--splits",
        str(DEFAULT_SPLIT_DIR / "splits.csv"),
        "--output",
        str(args.output),
        "--target",
        args.target,
        "--dim-cols",
        *args.dim_cols,
        "--data-version",
        args.features.stem,
        "--feature-set",
        f"quality_{args.quality_col}_gte_{args.min_quality}",
    ], check=True)


if __name__ == "__main__":
    main()
