import json
import os
from typing import Any, Dict, Tuple

import rtoml

from joj3_config_generator.convert import convert
from joj3_config_generator.models import repo, task


def read_convert_files(
    case_name: str,
) -> Tuple[repo.Config, task.Config, Dict[str, Any]]:
    root = os.path.dirname(os.path.realpath(__file__))
    repo_toml_path = os.path.join(root, case_name, "repo.toml")
    with open(repo_toml_path) as f:
        repo_toml = f.read()
    task_toml_path = os.path.join(root, case_name, "task.toml")
    with open(task_toml_path) as f:
        task_toml = f.read()
    result_json_path = os.path.join(root, case_name, "task.json")
    with open(result_json_path) as f:
        result: Dict[str, Any] = json.load(f)
    repo_obj = rtoml.loads(repo_toml)
    task_obj = rtoml.loads(task_toml)
    return repo.Config(**repo_obj), task.Config(**task_obj), result


def load_case(case_name: str) -> None:
    repo, task, expected_result = read_convert_files(case_name)
    result = convert(repo, task).model_dump(mode="json", by_alias=True)
    assert result == expected_result