#!/usr/bin/env python3
from __future__ import annotations

import argparse
from pathlib import Path
import sys

import pandas as pd

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))

from src.config_utils import prepare_output_dirs, read_config, set_thread_env
from src.stacking_eval import run_stack_task


def main() -> None:
    set_thread_env(1)
    parser = argparse.ArgumentParser(description="Run one stack task from stack_tasks.csv")
    parser.add_argument("--config", default="config/experiment.yaml")
    parser.add_argument("--task-id", type=int, required=True)
    args = parser.parse_args()

    cfg_path = Path(args.config).resolve()
    cfg = read_config(cfg_path)
    dirs = prepare_output_dirs(cfg, base_dir=cfg_path.parent.parent)
    task_file = dirs["output"] / "stack_tasks.csv"
    if not task_file.exists():
        raise FileNotFoundError(f"Stack task file not found: {task_file}. Run scripts/00_make_stack_tasks.py first.")
    tasks = pd.read_csv(task_file)
    if args.task_id < 0 or args.task_id >= len(tasks):
        raise IndexError(f"task-id {args.task_id} outside 0..{len(tasks)-1}")
    task = tasks.iloc[args.task_id].to_dict()
    result = run_stack_task(cfg, task, dirs)
    print(result)


if __name__ == "__main__":
    main()
