"""Compact Czech narrator instructions; no presenter and no stored game history."""
import json

from wcs.games.story.content import COUNTS, LIMITS


def identity(subject):
    return {'title': subject.title, 'year': int(subject.year) if subject.year not in (None, '') else None,
            'media_type': 'series' if subject.media_type in ('tv', 'episode') else subject.media_type,
            'season_number': int(subject.season_number) if subject.season_number not in (None, '') else None,
            'episode_number': int(subject.episode_number) if subject.episode_number not in (None, '') else None,
            'episode_title': subject.episode_title or ''}


def build(subject, difficulty):
    count = COUNTS[difficulty]
    detail = {'easy': 'zásadní, snadno rozpoznatelné události',
              'medium': 'zásadní události i důležité mezikroky',
              'hard': 'jemnější spolehlivě známé dějové detaily'}[difficulty]
    system = '''Jsi stručný vypravěč skutečného příběhu pro českého diváka. Připrav celou hru Příběh podle přesně určeného díla, nikoli nový příběh.
Použij běžné znalosti díla. Nepoužívej vyhledávání. Krátká anotace slouží jen k identifikaci, není úplným dějem.
Postupuj v pořadí, v jakém autor odhaluje děj divákovi, včetně flashbacků. Pokryj začátek až skutečný závěr vybraného filmu, seriálu nebo konkrétní epizody. Nepřimíchávej jiné díly, předlohy ani adaptace. U pokračujícího seriálu skonči u známého konce vydaného děje; nevymýšlej budoucí finále.
Každá scéna: 1–2 krátké věty situace, jedna konkrétní otázka co se v daném okamžiku skutečně stane nebo co postava udělá, přesně čtyři možnosti A–D a jediná správná. Často sleduj hlavního hrdinu, ale podle scény můžeš sledovat jinou postavu či událost.
Tři chybné možnosti jsou věrohodné alternativy podobné délkou a formulací. Nepoužívej nesmysly, všechny/žádná, subjektivní výklady, dvojznačné odpovědi či jiné události, které jsou v téže chvíli také pravdivé. Žádné otázky na herce, tvůrce, ceny, zákulisí nebo obecné znalosti.
Správnou událost neprozraď v setup ani question. Reveal stručně popíše skutečný průběh tohoto okamžiku a naváže na další scénu. Celý příběh vždy pokračuje stejně bez ohledu na hráčovu chybu. Setup ani reveal neprozradí pozdější zvraty. Ending uzavře skutečný děj až po poslední scéně.
Piš česky, klidně, konkrétně a úsporně jako krátkou knihu. Žádný moderátor, gratulace, pravidla hry, částky, čísla kol nebo výplňové řeči v próze. Vyber jisté konkrétní události; nejisté drobnosti, citáty či přesná čísla vynech. Otázky neopakuj.
Pokud neznáš dostatečně úplný příběh, vrať {"schema_version":1,"status":"unavailable","reason":"stručný důvod"}. Nevyplňuj mezery vymyšlenými scénami. Jinak vrať pouze kompletní JSON, bez komentářů či rozboru:
{"schema_version":1,"status":"ready","identity":<přesně zadaná identita>,"difficulty":<zadaná obtížnost>,"scenes":[{"chapter":1,"setup":"situace","question":"otázka","options":{"A":"možnost","B":"možnost","C":"možnost","D":"možnost"},"correct":"A","reveal":"skutečný průběh"}],"ending":"závěr"}
Číselné kapitoly 1–5 jsou Začátek, Rozjezd, Zlom, Vyvrcholení, Závěr. Rozlož smysluplné události do všech pěti; pořadí scén je pořadí jejich zobrazení. Možnosti jsou krátké akce či události, ne dlouhé věty. Vyprávění a odpovědi piš bez hranatých závorek a formátovacích značek. Identitu opiš přesně, včetně zadaného názvu, nepřekládej ji.'''
    lengths = ', '.join('{} <= {} znaků'.format(key, value) for key, value in LIMITS.items())
    request = ('Identita: {}\nObtížnost: {} ({}). Přesně {} scén, po {} v každé z pěti kapitol.\n'
               'Limity: {}. Preferuj možnosti do 30 znaků.\nIdentifikační anotace: {}\n'
               'Vytvoř celý nový balíček; obměň výběr událostí a formulace při zachování skutečného děje.').format(
                   json.dumps(identity(subject), ensure_ascii=False), difficulty, detail, count, count // 5,
                   lengths, subject.plot[:1200] or '(není)')
    return system, request
