from __future__ import annotations
from dataclasses import dataclass, asdict
from typing import Dict, List
import pandas as pd

@dataclass
class BCTask:
    task_id: int
    lead: int
    source_model: str
    target: str
    ai_model: str
    feature_set: str
    spatial_mode: str


def make_bc_tasks(cfg: dict) -> pd.DataFrame:
    rows: List[Dict] = []
    tid = 0
    for lead in cfg['time']['leads']:
        for source in cfg['members']['source_models']:
            for target in cfg['members']['targets']:
                for fs in cfg['members']['feature_sets'][target].keys():
                    for spatial in cfg['members']['spatial_modes']:
                        for model in cfg['members']['ai_models']:
                            rows.append(asdict(BCTask(tid, int(lead), source, target, model, fs, spatial)))
                            tid += 1
    return pd.DataFrame(rows)


def task_label(row) -> str:
    return f"LT{int(row['lead']):02d}_{row['source_model']}_{row['target']}_{row['feature_set']}_{row['spatial_mode']}_{row['ai_model']}"
