"""Native Estuary textures for the lean release; original source assets stay intact.

Release XML uses literal native names in the installed skin's texture bundle.
Static control textures cannot evaluate runtime Home properties. Python artwork
uses native() after constructing its path, including paths built with os.path.join.
Rounded diffuse masks must be removed in staging together with scalediffuse;
their white fallback below is opaque and does not reproduce rounded corners.
"""
from urllib.parse import quote

import xbmcvfs

ARCHIVE_PATH = 'special://xbmc/addons/skin.estuary/media/Textures.xbt'
LOGO_PATH = 'special://home/addons/plugin.video.milionar/resources/media/brand/milionar-mark.png'
LOGO_ALIASES = (
    'brand/milionar-mark.png',
    'resources/skin.milionar/resources/icon.png',
    'resources/skin.milionar/media/milionar/logo.png',
    'resources/skin.milionar/media/milionar/logo-mark-v1-final.png',
    'milionar/logo.png', 'milionar/logo-mark-v1-final.png',
)

# Entries are lowercase names in Estuary's archive. Standard native artwork
# replaces custom illustrations; control dimensions and navigation stay intact.
NATIVE_MAP = {
    'ai_card_movies.png': 'defaultmovies.png',
    'ai_card_series.png': 'defaulttvshows.png',
    'ai_card_mix.png': 'defaultvideo.png',
    'ai_card_actors.png': 'defaultactor.png',
    'ai_card_directors.png': 'defaultdirector.png',
    'ai_card_collections.png': 'defaultsets.png',
    'ai_card_history.png': 'defaultrecentlyaddedmovies.png',
    'card_ai_recommend.jpg': 'defaultaddonssearch.png',
    'card_search_tmdb.jpg': 'icons/search.png',
    'card_tmdb_recommend.jpg': 'defaultmovies.png',
    'card_my_library.jpg': 'defaultvideo.png',
    'placeholder_tv_card.jpg': 'defaulttvshowtitle.png',
    'placeholder_movie_card.png': 'defaultmovietitle.png',
    'poster_placeholder.png': 'defaultmovietitle.png',
    'placeholder_poster.png': 'defaultmovietitle.png',
    'plus_card.png': 'defaultaddsource.png',
    'icons/Games.png': 'icons/sidemenu/games.png',
    'icons/TVShows.png': 'icons/sidemenu/tv.png',
    'icon_ai_sparkle.png': 'icons/infodialogs/similar.png',
    'icon_trash.png': 'icons/infodialogs/uninstall.png',
    'notif_icon_info.png': 'icons/infodialogs/info.png',
    'notif_icon_close.png': 'dialogs/close.png',
    'search_icon_close.png': 'dialogs/close.png',
    'notif_icon_play.png': 'icons/infodialogs/play.png',
    'search_play_idle.png': 'icons/infodialogs/play.png',
    'search_play_focus.png': 'icons/infodialogs/play.png',
    'search_header_play.png': 'icons/infodialogs/play.png',
    'search_badge_w.png': 'defaultaddonvideo.png',
    'icon_provider_webshare.png': 'defaultaddonvideo.png',
    'brand/webshare_logo_official.jpg': 'defaultaddonvideo.png',
    'search_badge_k.png': 'defaultaddonpvrclient.png',
    'icon_provider_kraska.png': 'defaultaddonpvrclient.png',
    'check_icon.png': 'icons/infodialogs/rating.png',
    'checkmark.png': 'icons/infodialogs/rating.png',
    'ai_hub_fanart.jpg': 'colors/black.png',
    'background.jpg': 'colors/black.png',
    'hub_background_v2.jpg': 'colors/black.png',
    'fanart_fallback.jpg': 'colors/black.png',
    'white.png': 'colors/white.png',
    'card_mask.png': 'colors/white.png',
    'card_mask_large.png': 'colors/white.png',
    'card_mask_large_backup.png': 'colors/white.png',
    'game_poster_mask.png': 'colors/white.png',
    'large_poster_mask.png': 'colors/white.png',
    'poster_mask_card_large.png': 'colors/white.png',
    'poster_mask_card_large_backup.png': 'colors/white.png',
    'poster_mask_rounded.png': 'colors/white.png',
    'search_poster_mask.png': 'colors/white.png',
    'still_mask_card.png': 'colors/white.png',
    'still_mask_card_large.png': 'colors/white.png',
    'still_mask_card_large_backup.png': 'colors/white.png',
    'still_mask_rounded.png': 'colors/white.png',
    'notif_thumb_mask.png': 'colors/white.png',
    'fanart_mask_rounded_top.png': 'colors/white.png',
    'notif_progress_fill.png': 'colors/white.png',
    'progress_pill.png': 'colors/white.png',
    'scrollbar_rounded.png': 'colors/white.png',
    'icon_quality_4k.png': 'colors/white.png',
    'icon_quality_1080p.png': 'colors/white.png',
    'icon_quality_720p.png': 'colors/white.png',
    'icon_quality_480p.png': 'colors/white.png',
    'icon_quality_sd.png': 'colors/white.png',
    'btn_action.png': 'buttons/button-fo.png',
    'btn_action_pill.png': 'buttons/button-fo.png',
    'btn_pill.png': 'buttons/button-fo.png',
    'badge_pill.png': 'buttons/button-fo.png',
    'btn_rounded.png': 'buttons/button-fo.png',
    'btn_rounded.png': 'buttons/button-fo.png',
    'game_ladder_pill.png': 'buttons/button-fo.png',
    'notif_button_fill.png': 'buttons/button-fo.png',
    'notif_pill_small_fill.png': 'buttons/button-fo.png',
    'search_button_fill.png': 'buttons/button-fo.png',
    'search_card_button_fill.png': 'buttons/button-fo.png',
    'btn_rounded_dialog.png': 'buttons/dialogbutton-fo.png',
    'dialog_rounded_large.png': 'buttons/dialogbutton-fo.png',
    'dialog_rounded_large_backup.png': 'buttons/dialogbutton-fo.png',
    'panel_bg_rounded.png': 'buttons/dialogbutton-fo.png',
    'notif_card_fill.png': 'buttons/dialogbutton-fo.png',
    'search_card_fill.png': 'buttons/dialogbutton-fo.png',
    'search_row_fill.png': 'buttons/dialogbutton-fo.png',
    'infobox_focus.png': 'buttons/dialogbutton-fo.png',
    'infobox_focus_bg.png': 'buttons/dialogbutton-fo.png',
    'item_bg_rounded.png': 'buttons/dialogbutton-fo.png',
    'proglist_focus_appletv.png': 'buttons/dialogbutton-fo.png',
    'game_ladder_bg.png': 'buttons/dialogbutton-fo.png',
    'notif_circle_fill.png': 'buttons/roundbutton-fo.png',
    'search_circle_fill.png': 'buttons/roundbutton-fo.png',
    'search_action_idle.png': 'buttons/roundbutton-fo.png',
    'search_action_focus.png': 'buttons/roundbutton-fo.png',
    'btn_rounded_dialog_ring.png': 'progress/texturebg_border_white.png',
    'card_border.png': 'progress/texturebg_border_white.png',
    'card_border_focus.png': 'progress/texturebg_border_white.png',
    'card_border_program.png': 'progress/texturebg_border_white.png',
    'channel_card_focus.png': 'progress/texturebg_border_white.png',
    'ep_border_focus.png': 'progress/texturebg_border_white.png',
    'large_poster_border.png': 'progress/texturebg_border_white.png',
    'notif_button_stroke.png': 'progress/texturebg_border_white.png',
    'notif_card_stroke.png': 'progress/texturebg_border_white.png',
    'notif_circle_stroke.png': 'progress/texturebg_border_white.png',
    'notif_pill_small_stroke.png': 'progress/texturebg_border_white.png',
    'search_button_stroke.png': 'progress/texturebg_border_white.png',
    'search_card_button_stroke.png': 'progress/texturebg_border_white.png',
    'search_card_stroke.png': 'progress/texturebg_border_white.png',
    'search_circle_stroke.png': 'progress/texturebg_border_white.png',
    'search_row_stroke.png': 'progress/texturebg_border_white.png',
    'gradient_appletv_bottom.png': 'overlays/overlayfade.png',
    'gradient_bottom.png': 'overlays/overlayfade.png',
    'gradient_cinematic_bottom.png': 'overlays/overlayfade.png',
    'gradient_fade_bottom_rounded.png': 'overlays/overlayfade.png',
    'gradient_top_fade.png': 'frame/osdfade.png',
    'gradient_top_header.png': 'frame/osdfade.png',
    'gradient_left_fade.png': 'colors/black.png',
    'gradient_right.png': 'colors/black.png',
    'common/black.png': 'colors/black.png',
    'common/arrow_right.png': 'overlays/arrowright.png',
    'DefaultSearch.png': 'defaultaddonssearch.png',
    'defaultsearch.png': 'defaultaddonssearch.png',
    'DefaultProgram.png': 'defaultprogram.png',
}


def prefix():
    """Portable external-XBT prefix, ending in a slash for XML concatenation."""
    return 'xbt://' + quote(xbmcvfs.translatePath(ARCHIVE_PATH), safe='') + '/'


def native(name):
    """Resolve custom media or a native entry; preserve unrelated artwork URLs."""
    if not name:
        return name
    path = name.replace('\\', '/')
    if '://' in path and not path.startswith('special://home/addons/plugin.video.milionar/'):
        return name
    key = path.split('/resources/media/', 1)[-1]
    if key.startswith('resources/media/'):
        key = key[len('resources/media/'):]
    if key in LOGO_ALIASES or any(path.endswith('/' + alias) for alias in LOGO_ALIASES):
        return LOGO_PATH
    entry = NATIVE_MAP.get(key)
    if entry is None:
        if '://' in path or path.startswith('/') or (len(path) > 1 and path[1] == ':'):
            return name
        entry = path.lower()
    return prefix() + entry
