import abc

import xbmcgui

from lib.gui.base_window import BaseWindow


class SourcePackWindow(BaseWindow):
    def __init__(self, xml_file, location, source=None, pack_info=None, item_information=None):
        super().__init__(xml_file, location, item_information=item_information)
        self.pack_info = pack_info or {"files": []}
        self.source = source or type("EmptySource", (), {"type": "", "quality": ""})()
        self.display_list = None

    def onInit(self):
        self.display_list = self.getControlList(1000)
        self.populate_sources_list()
        self.set_default_focus(self.display_list, 1000, control_list_reset=True)
        super().onInit()

    def populate_sources_list(self):
        self.display_list.reset()

        files = self.pack_info.get("files", [])
        if files:
            for _, title in files:
                menu_item = xbmcgui.ListItem(label=title)
                menu_item.setProperty("title", title or "")
                menu_item.setProperty("type", getattr(self.source, "type", "") or "")
                menu_item.setProperty("quality", getattr(self.source, "quality", "") or "")
                self.display_list.addItem(menu_item)
        else:
            self.setProperty("resolving", "false")
            self.close()

    @abc.abstractmethod
    def handle_action(self, action_id, control_id=None):
        """Subclasses must implement this to handle user actions."""
        pass
