"""Изменяет формат "поделиться"

"selectable_text": {
  "enabled": true,
  "format": {
    "share_channel_text": "Канал: «%1$s»\n%2$schannel/%3$d",
    "share_collection_text": "Коллекция: «%1$s»\n%2$scollection/%3$d",
    "share_profile_text": "Профиль пользователя «%1$s»\n%2$sprofile/%3$d",
    "share_release_text": "Релиз: «%1$s»\n%2$srelease/%3$d"
  }
}
"""

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

from lxml import etree
from pydantic import Field

from utils.config import PatchTemplate

DEFAULT_FORMATS = {
    "share_channel_text": "Канал: «%1$s»\n%2$schannel/%3$d",
    "share_collection_text": "Коллекция: «%1$s»\n%2$scollection/%3$d",
    "share_profile_text": "Профиль пользователя «%1$s»\n%2$sprofile/%3$d",
    "share_release_text": "Релиз: «%1$s»\n%2$srelease/%3$d",
}


class Patch(PatchTemplate):
    priority: int = Field(frozen=True, exclude=True, default=0)
    format: Dict[str, str] = Field(
        DEFAULT_FORMATS, description="Строки для замены в `strings.xml`"
    )

    def apply(self, base: Dict[str, Any]) -> bool:
        file_path = "./decompiled/res/values/strings.xml"

        parser = etree.XMLParser(remove_blank_text=True)
        tree = etree.parse(file_path, parser)
        root = tree.getroot()

        # Обновляем значения
        for string in root.findall("string"):
            name = string.get("name")
            if name in self.format:
                string.text = self.format[name]

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

        return True
