import csv
from typing import TypeAlias

from games.models import Game

DataList: TypeAlias = list[dict[str, str]] | None


def read_csv(filename: str) -> DataList:
    with open(filename, "r") as csvfile:
        writer = csv.DictReader(csvfile)
        return writer


def import_data(data: DataList):
    matching_names = {}
    for line in data:
        name = line["name"]
        if name not in matching_names:
            # try exact match first
            try:
                game_id = Game.objects.get(name__iexact=name)
            except (Game.DoesNotExist, Game.MultipleObjectsReturned):
                game_id = None
            matching_names[name] = game_id
    print(f"Exact matched {len(matching_names)} games.")


def import_from_file(filename: str):
    import_data(read_csv(filename))
