"""Добавляет в настройки ссылки и добвляет текст к версии приложения

"settings_urls": {
  "enabled": true,
  "menu": {
    "Раздел": [
      {
        "title": "Заголовок",
        "description": "Описание",
        "url": "ссылка",
        "icon": "@drawable/ic_custom_telegram",
        "icon_space_reserved": "false"
      },
      ...
    ],
    ...
    ]
  },
  "version": " by wowlikon"
}
"""

__author__ = "wowlikon <wowlikon@gmail.com>"
__version__ = "1.0.0"
import shutil
from typing import Any, Dict, List

from lxml import etree
from pydantic import Field

from utils.config import PatchTemplate
from utils.public import insert_after_public

# Config
DEFAULT_MENU = {
    "Мы в социальных сетях": [
        {
            "title": "Мы в Telegram",
            "description": "Подпишитесь на канал, чтобы быть в курсе последних новостей.",
            "url": "https://t.me/http_teapod",
            "icon": "@drawable/ic_custom_telegram",
            "icon_space_reserved": "false",
        },
        {
            "title": "wowlikon",
            "description": "Разработчик",
            "url": "https://t.me/wowlikon",
            "icon": "@drawable/ic_custom_telegram",
            "icon_space_reserved": "false",
        },
        {
            "title": "Kentai Radiquum",
            "description": "Разработчик",
            "url": "https://t.me/radiquum",
            "icon": "@drawable/ic_custom_telegram",
            "icon_space_reserved": "false",
        },
    ],
    "Прочее": [
        {
            "title": "Помочь проекту",
            "description": "Вы можете помочь нам с идеями, написанием кода или тестированием.",
            "url": "https://git.0x174.su/anixart-mod",
            "icon": "@drawable/ic_custom_crown",
            "icon_space_reserved": "false",
        }
    ],
}


class Patch(PatchTemplate):
    priority: int = Field(frozen=True, exclude=True, default=0)
    version: str = Field(" by wowlikon", description="Суффикс версии")
    menu: Dict[str, List[Dict[str, str]]] = Field(DEFAULT_MENU, description="Меню")

    def make_category(self, ns, name, items):
        cat = etree.Element("PreferenceCategory", nsmap=ns)
        cat.set(f"{{{ns['android']}}}title", name)
        cat.set(f"{{{ns['app']}}}iconSpaceReserved", "false")

        for item in items:
            pref = etree.SubElement(cat, "Preference", nsmap=ns)
            pref.set(f"{{{ns['android']}}}title", item["title"])
            pref.set(f"{{{ns['android']}}}summary", item["description"])
            pref.set(f"{{{ns['app']}}}icon", item["icon"])
            pref.set(f"{{{ns['app']}}}iconSpaceReserved", item["icon_space_reserved"])

            intent = etree.SubElement(pref, "intent", nsmap=ns)
            intent.set(f"{{{ns['android']}}}action", "android.intent.action.VIEW")
            intent.set(f"{{{ns['android']}}}data", item["url"])
            intent.set(f"{{{ns['app']}}}iconSpaceReserved", item["icon_space_reserved"])

        return cat

    def apply(self, base: Dict[str, Any]) -> bool:
        # Добавление кастомных иконок
        shutil.copy(
            "./resources/ic_custom_crown.xml",
            "./decompiled/res/drawable/ic_custom_crown.xml",
        )
        insert_after_public("warning_error_counter_background", "ic_custom_crown")

        shutil.copy(
            "./resources/ic_custom_telegram.xml",
            "./decompiled/res/drawable/ic_custom_telegram.xml",
        )
        insert_after_public("warning_error_counter_background", "ic_custom_telegram")

        file_path = "./decompiled/res/xml/preference_main.xml"
        parser = etree.XMLParser(remove_blank_text=True)
        tree = etree.parse(file_path, parser)
        root = tree.getroot()

        # Вставка новых пунктов перед последним
        pos = root.index(root[-1])
        for section, items in self.menu.items():
            root.insert(pos, self.make_category(base["xml_ns"], section, items))
            pos += 1

        # Сохранение
        tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")

        # Добавление суффикса версии
        filepaths = [
            "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/activity/UpdateActivity.smali",
            "./decompiled/smali_classes3/com/swiftsoft/anixartd/ui/fragment/main/preference/MainPreferenceFragment.smali",
        ]
        for filepath in filepaths:
            content = ""
            with open(filepath, "r", encoding="utf-8") as file:
                for line in file.readlines():
                    if (
                        '"\u0412\u0435\u0440\u0441\u0438\u044f'.encode(
                            "unicode_escape"
                        ).decode()
                        in line
                    ):
                        content += (
                            line[: line.rindex('"')]
                            + self.version
                            + line[line.rindex('"') :]
                        )
                    else:
                        content += line
            with open(filepath, "w", encoding="utf-8") as file:
                file.write(content)
        return True
