import dataclasses

from folkugat_web.dal.sql import get_connection
from folkugat_web.dal.sql.temes import query as temes_q
from folkugat_web.dal.sql.temes import write as temes_w
from folkugat_web.model import temes as model


def create_tema(title: str = "") -> model.Tema:
    with get_connection() as con:
        new_tema = temes_w.insert_tema(tema=model.Tema(title=title, hidden=False), con=con)
        temes_w.update_ngrams(tema=new_tema, con=con)
    return new_tema


def delete_tema(tema_id: int) -> None:
    temes_w.delete_tema(tema_id=tema_id)


def update_title(tema_id: int, title: str) -> model.Tema:
    with get_connection() as con:
        tema = temes_q.get_tema_by_id(tema_id=tema_id, con=con)
        if tema is None:
            raise ValueError(f"No tune found with tema_id = {tema_id}!")

        new_tema = dataclasses.replace(tema, title=title)
        temes_w.update_tema(tema=new_tema, con=con)
        temes_w.update_ngrams(tema=new_tema, con=con)

    return new_tema


def set_visibility(tema_id: int, hidden: bool) -> model.Tema:
    with get_connection() as con:
        tema = temes_q.get_tema_by_id(tema_id=tema_id, con=con)
        if tema is None:
            raise ValueError(f"No tune found with tema_id = {tema_id}!")
        tema.hidden = hidden
        temes_w.update_tema(tema=tema, con=con)

    return tema
