import json
import os

from lib.clients.tmdb.utils.utils import tmdb_get
from lib.db.pickle_db import PickleDatabase
from lib.jacktook.utils import kodilog
from lib.utils.general.utils import parse_time, set_media_infoTag, set_pluging_category
from lib.utils.kodi.utils import (
    ADDON_PATH,
    add_directory_items_batch,
    apply_section_view,
    build_url,
    container_refresh,
    end_of_directory,
    make_list_item,
    translation,
)

pickle_db = PickleDatabase()


def delete_last_title_entry(params):
    pickle_db.delete_item(key="jt:lth", subkey=params.get("title"))
    container_refresh()


def show_last_titles(params):
    if params is None:
        params = {}

    set_pluging_category(translation(90070))

    per_page = 10
    page = int(params.get("page", 1))

    all_items = list(reversed(pickle_db.get_key("jt:lth").items()))
    total = len(all_items)

    start = (page - 1) * per_page
    end = start + per_page
    items = all_items[start:end]

    items = sorted(items, key=parse_time, reverse=True)

    # Add "Clear Titles" button
    directory_items = []

    list_item = make_list_item(label="Clear Titles")
    list_item.setArt({"icon": os.path.join(ADDON_PATH, "resources", "img", "clear.png")})
    directory_items.append((build_url("clear_history", type="lth"), list_item, True))

    for title, data in items:
        formatted_time = data["timestamp"]
        mode = data["mode"]
        ids = data.get("ids")

        if mode == "tv":
            details = tmdb_get("tv_details", ids.get("tmdb_id"))
        else:
            details = tmdb_get("movie_details", ids.get("tmdb_id"))

        if not details:
            kodilog(f"Failed to get details for {mode} with ID {ids.get('tmdb_id')}")
            continue

        list_item = make_list_item(label=f"{title} — {formatted_time}")
        set_media_infoTag(list_item, data=details, mode=mode)
        list_item.setArt({"icon": os.path.join(ADDON_PATH, "resources", "img", "trending.png")})
        list_item.addContextMenuItems(
            [
                (
                    "Delete from history",
                    f"RunPlugin({build_url('delete_last_title_entry', title=title)})",
                )
            ]
        )

        if mode == "tv":
            directory_items.append(
                (build_url("show_seasons_details", ids=ids, mode=mode), list_item, True)
            )
        elif mode == "movies":
            list_item.setProperty("IsPlayable", "true")
            directory_items.append(
                (build_url("search", mode=mode, query=title, ids=ids), list_item, False)
            )
        elif mode == "tg_latest":
            directory_items.append(
                (
                    build_url(
                        "list_jackgram_title_sources",
                        data=json.dumps(data.get("tg_data")),
                    ),
                    list_item,
                    True,
                )
            )

    # "Next Page"
    if end < total:
        list_item = make_list_item(label="Next Page")
        list_item.setArt({"icon": os.path.join(ADDON_PATH, "resources", "img", "nextpage.png")})
        directory_items.append((build_url("titles_history", page=page + 1), list_item, True))

    add_directory_items_batch(directory_items)

    end_of_directory()
    apply_section_view("view.history")
