import hircine.enums as enums
from hircine.scraper import ScrapeWarning
from hircine.scraper.types import (
    Artist,
    Circle,
    Date,
    Language,
    Title,
)
from hircine.scraper.utils import parse_dict


class DynastyScansHandler:
    source = "dynastyscans"

    def scrape(self, data):
        parsers = {
            "date": Date.from_iso,
            "lang": self.parse_language,
            "author": Artist,
            "group": Circle,
        }

        yield from parse_dict(parsers, data)

        if manga := data.get("manga"):
            title = manga

            if chapter := data.get("chapter"):
                title = title + f" Ch. {chapter}"

            if subtitle := data.get("title"):
                title = title + f": {subtitle}"

            yield Title(title)

    def parse_language(self, input):
        try:
            return Language(value=enums.Language[input.upper()])
        except (KeyError, ValueError) as e:
            raise ScrapeWarning(f"Could not parse language: '{input}'") from e