import datetime
import json

from folkugat_web.model import temes as model


def tema_to_row(tema: model.Tema) -> dict:
    return {
        'id': tema.id,
        'title': tema.title,
        'properties': json.dumps(list(map(lambda p: p.to_dict(), tema.properties))),
        'links': json.dumps(list(map(lambda l: l.to_dict(), tema.links))),
        'lyrics': json.dumps(list(map(lambda l: l.to_dict(), tema.lyrics))),
        'alternatives': json.dumps(tema.alternatives),
        'ngrams': json.dumps(tema.ngrams),
        'modification_date': tema.modification_date.isoformat(),
        'creation_date': tema.creation_date.isoformat(),
        'hidden': 1 if tema.hidden else 0,
    }


def cell_to_ngrams(cell: str) -> model.NGrams:
    return {int(n): ngrams_ for n, ngrams_ in json.loads(cell).items()}


def row_to_tema(row: tuple) -> model.Tema:
    return model.Tema(
        id=row[0],
        title=row[1],
        properties=list(map(model.Property.from_dict, json.loads(row[2]))),
        links=list(map(model.Link.from_dict, json.loads(row[3]))),
        lyrics=list(map(model.Lyrics.from_dict, json.loads(row[4]))),
        alternatives=json.loads(row[5]),
        ngrams=cell_to_ngrams(row[6]),
        modification_date=datetime.datetime.fromisoformat(row[7]),
        creation_date=datetime.datetime.fromisoformat(row[8]),
        hidden=bool(row[9]),
    )
