#!/usr/bin/env python3
"""Render a notification dialog XML with sample data to PNG (harness entry point).

Usage:
    python3 render_dialog.py <xml> <out.png> [--profile episode|movie|countdown]
                             [--focus 110,111] [--hidden 501] [--props key=value ...]
"""
import argparse
import json
import os
import sys

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from kodi_renderer import Renderer, parse_po, STRINGS_PO  # noqa: E402

HERE = os.path.dirname(os.path.abspath(__file__))
THUMB = os.path.join(HERE, 'sample_thumb.png')
POSTER = os.path.join(HERE, 'sample_poster.png')

SEARCH_ITEMS = [
    {'Label': 'The.Big.Bang.Theory.S04E09.1080p.mkv', 'filename': 'The.Big.Bang.Theory.S04E09.1080p.mkv',
     'quality_raw': '1080p', 'format_upper': 'MKV', 'size_formatted': '725 MB', 'language': 'CZ',
     'provider_letter_colored': '[COLOR FF00B4D8]W[/COLOR]'},
    {'Label': 'The.Big.Bang.Theory.S04E09.720p.mkv', 'filename': 'The.Big.Bang.Theory.S04E09.720p.mkv',
     'quality_raw': '720p', 'format_upper': 'MKV', 'size_formatted': '384 MB', 'language': 'CZ',
     'provider_letter_colored': '[COLOR FF00B4D8]W[/COLOR]'},
    {'Label': 'The.Big.Bang.Theory.S04E09.1080p.mp4', 'filename': 'The.Big.Bang.Theory.S04E09.1080p.mp4',
     'quality_raw': '1080p', 'format_upper': 'MP4', 'size_formatted': '817 MB', 'language': 'CZ',
     'provider_letter_colored': '[COLOR FF00B4D8]W[/COLOR]'},
    {'Label': 'The.Big.Bang.Theory.S04E09.720p.mp4', 'filename': 'The.Big.Bang.Theory.S04E09.720p.mp4',
     'quality_raw': '720p', 'format_upper': 'MP4', 'size_formatted': '384 MB', 'language': 'CZ',
     'provider_letter_colored': '[COLOR FF00B4D8]W[/COLOR]'},
    {'Label': 'The.Big.Bang.Theory.S04E09.1080p.HDTV.mkv', 'filename': 'The.Big.Bang.Theory.S04E09.1080p.HDTV.mkv',
     'quality_raw': '1080p', 'format_upper': 'MKV', 'size_formatted': '1.2 GB', 'language': 'CZ',
     'provider_letter_colored': '[COLOR FF00B4D8]W[/COLOR]'},
]

BASE_PROPS = {
    'WCS.Episode.SeriesName': 'Teorie velkého třesku',
    'WCS.Episode.Title': 'Komplikovanost vztahů',
    'WCS.Episode.SeasonEpisode': 'S04E09',
    'WCS.Episode.YearOnly': '2010',
    'WCS.Episode.RatingOnly': '★ 7.9/10',
    'WCS.Episode.MetaLine': (
        '[COLOR FFC9CAD0]S04E09[/COLOR][COLOR FF7F7F86]  •  [/COLOR]'
        '[COLOR FFC9CAD0]2010[/COLOR][COLOR FF7F7F86]  •  [/COLOR]'
        '[COLOR FFF2DD56]★ 7.9/10[/COLOR]'
    ),
    'WCS.Episode.Thumb': THUMB,
    'WCS.Episode.ShowPlot': 'false',
    'WCS.Episode.ShowGame': 'false',
    'WCS.Episode.FullInfo': 'INFO\n\n[COLOR FF87CEEB]Režie:[/COLOR] Mark Cendrowski\n'
                            '[COLOR FF87CEEB]Žánr:[/COLOR] Komedie\n'
                            '[COLOR FF87CEEB]Délka epizody:[/COLOR] 21 min\n\n'
                            '[COLOR FF87CEEB]DĚJ:[/COLOR]\nKomplikovanost vztahů je epizoda...',
    'WCS.Movie.Title': 'Teorie velkého třesku',
    'WCS.Movie.Year': '2010',
    'WCS.Movie.MetaLine': (
        '[COLOR FFC9CAD0]2010[/COLOR][COLOR FF7F7F86]  •  [/COLOR]'
        '[COLOR FFF2DD56]★ 7.9/10[/COLOR]'
    ),
    'WCS.Movie.Thumb': THUMB,
    'WCS.Movie.Genre': 'Komedie',
    'WCS.Movie.Director': 'Mark Cendrowski',
    'WCS.Movie.Runtime': '21 min',
    'WCS.Movie.ShowPlot': 'false',
    'WCS.Movie.ShowGame': 'false',
    'WCS.Movie.FullInfo': 'INFO\n\n[COLOR FF87CEEB]DĚJ:[/COLOR]\nPopis filmu...',
    'WCS.Autoplay.NextEpisode.Title': 'Komplikovanost vztahů',
    'WCS.Autoplay.NextEpisode.SeasonEpisode': 'S04E09',
    'WCS.Autoplay.NextEpisode.YearOnly': '2010',
    'WCS.Autoplay.NextEpisode.RatingOnly': '★ 7.9/10',
    'WCS.Autoplay.MetaLine': (
        '[COLOR FFC9CAD0]S04E09[/COLOR][COLOR FF7F7F86]  •  [/COLOR]'
        '[COLOR FFC9CAD0]2010[/COLOR][COLOR FF7F7F86]  •  [/COLOR]'
        '[COLOR FFF2DD56]★ 7.9/10[/COLOR]'
    ),
    'WCS.Autoplay.NextEpisode.Thumb': THUMB,
    'WCS.Autoplay.SeriesTitle': 'Teorie velkého třesku',
    'WCS.Autoplay.SeriesTMDBID': '1418',
    'WCS.Autoplay.SeriesFanart': '',
    'WCS.Autoplay.EpisodeDescription': '',
    'WCS.Autoplay.CountdownTime': '20',
    'WCS.Autoplay.Progress': '45',
    'WCS.Autoplay.ShowGame': 'false',
    'WCS.Game.Text': 'Vítejte ve hře...',
    'WCS.Game.State': 'menu',
    'WCS.Game.Type': 'quiz',
    'WCS.Game.Button1': 'Možnost A',
    'WCS.Game.Button2': 'Možnost B',
    'WCS.Game.Button3': 'Možnost C',
    'WCS.Game.Button4': 'Možnost D',
}

PROFILES = {
    'episode': {
        'WCS.Episode.Thumb': THUMB,
    },
    'movie': {
        'WCS.Movie.Thumb': THUMB,
    },
    'countdown': {},
    'search': {
        'WCS.Search.MovieTitle': 'Teorie velkého třesku',
        'WCS.Search.Subtitle': 'S04E09 · Komplikovanost vztahů',
        'WCS.Search.MetaLine': (
            '[COLOR FFB0B0B8]2010[/COLOR]   [COLOR FFB0B0B8]Komedie[/COLOR]   '
            '[COLOR FFB0B0B8]21 min[/COLOR]   [COLOR FFF2DD56]★ 7.9/10[/COLOR]'
        ),
        'WCS.Search.Plot': ('Rajesh, Howard s Bernadette se vydávají na pozorování planety. '
                            'Penny požádá Leonarda, aby před jejím otcem předstíral, že spolu opět...'),
        'WCS.Search.Poster': POSTER,
        'WCS.Search.ShowPlot': 'true',
        'WCS.Episode.IsEpisode': 'true',
        'WCS.Episode.FromLibrary': 'false',
    },
}


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('xml')
    parser.add_argument('out')
    parser.add_argument('--profile', default='episode')
    parser.add_argument('--focus', default='')
    parser.add_argument('--hidden', default='')
    parser.add_argument('--props', action='append', default=[])
    args = parser.parse_args()

    props = dict(BASE_PROPS)
    props.update(PROFILES.get(args.profile, {}))
    if args.profile == 'search':
        props['__items__'] = {50: SEARCH_ITEMS}
    for pair in args.props:
        key, _, value = pair.partition('=')
        props[key] = value

    focus = [int(x) for x in args.focus.split(',') if x.strip()]
    hidden = [int(x) for x in args.hidden.split(',') if x.strip()]

    strings = parse_po(STRINGS_PO)
    renderer = Renderer(props, focus_ids=focus, strings=strings)
    image = renderer.render(args.xml, hidden_ids=hidden)
    image.save(args.out)
    print(f"rendered {args.xml} -> {args.out}")


if __name__ == '__main__':
    main()
