{% from "components/_tabs.html" import tabs_intro %}
<header class="page-heading"><p class="eyebrow">LONGEVIDAD</p><h1>Escenarios, semillas, mods y aplicación instalable</h1><p>Comparte reglas sin compartir partidas, juega desafíos reproducibles y amplía contenido mediante JSON validado sin ejecutar código de terceros.</p></header>
<div data-tab-scope="scenarios">
{{ tabs_intro('scenarios', 'Apartados de escenarios y mods', 'Elige entre los datos del universo, el generador, el desafío, los mods, sus escenarios y la instalación web.') }}

<section class="panel" aria-labelledby="seed-title" data-tab-panel data-tab-id="escenarios-universo" data-tab-label="Universo y código"><h2 id="seed-title">Semilla y código de este universo</h2><dl class="compact-definition-list"><div><dt>Semilla</dt><dd><code>{{ config.universe_seed or 'partida anterior sin semilla declarada' }}</code></dd></div><div><dt>Código de escenario</dt><dd><textarea readonly rows="5" spellcheck="false">{{ scenario_code }}</textarea></dd></div></dl><p>Este código contiene reglas, origen y semilla, pero no recursos, progreso, nombres privados ni partidas.</p></section>

<section class="panel panel-wide" aria-labelledby="scenario-editor-title" data-tab-panel data-tab-id="escenarios-generador" data-tab-label="Generador">
  <h2 id="scenario-editor-title">Editor declarativo de escenarios</h2>
  <p>Crea un código importable desde Nueva partida. No modifica ni borra el universo actual.</p>
  <form method="post" action="{{ url_for('scenario_editor_action') }}" class="stacked-form">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
    <div class="form-grid">
      <label>Semilla <input name="universe_seed" maxlength="80" value="{{ config.universe_seed or 'eclipse-imperia' }}" required></label>
      <label>Rivales IA <input name="ai_count" type="number" min="1" max="{{ UNIVERSE_LIMITS.ai_rivals }}" value="{{ rival_count }}"></label>
      <label>Galaxias <input name="galaxy_count" type="number" min="1" max="{{ UNIVERSE_LIMITS.galaxies }}" value="{{ config.get('galaxy_count', 1) }}"></label>
      <label>Sistemas por galaxia <input name="galaxy_size" type="number" min="10" max="{{ UNIVERSE_LIMITS.systems_per_galaxy }}" value="{{ game.galaxy_size }}"></label>
      <label>Agromundos propios <input name="player_farm_worlds" type="number" min="0" max="{{ UNIVERSE_LIMITS.player_farm_worlds }}" value="{{ config.get('player_farm_worlds',0) }}"></label>
      <label>Cooperativas agrícolas IA <input name="farm_ai_count" type="number" min="0" max="{{ UNIVERSE_LIMITS.farm_ai }}" value="{{ config.get('farm_ai_count',0) }}"></label>
      <label>Tiempo con el servidor cerrado <select name="offline_mode"><option value="frozen" {% if config.get('offline_mode','frozen') == 'frozen' %}selected{% endif %}>Universo detenido</option><option value="realtime" {% if config.get('offline_mode') == 'realtime' %}selected{% endif %}>Tiempo real</option></select></label>
      <label>Velocidad <select name="speed">{% for value in [1,5,10,20,50] %}<option value="{{ value }}" {% if value == game.speed %}selected{% endif %}>×{{ value }}</option>{% endfor %}</select></label>
      <label>Dificultad <select name="difficulty"><option value="easy">Relajada</option><option value="normal" selected>Equilibrada</option><option value="hard">Veterana</option></select></label>
      <label>Gobierno <select name="government_type"><option value="democracy">Democracia</option><option value="council">Consejo</option><option value="appointment">Nombramiento</option></select></label>
      <label>Victoria <select name="victory_mode"><option value="sandbox">Universo abierto</option><option value="score">Puntuación</option><option value="domination">Dominación</option></select></label>
      <label>Puntos de victoria <input name="victory_score" type="number" min="5000" max="1000000" value="{{ config.get('victory_score', 50000) }}"></label>
      <label>Origen <select name="origin">{% for key, origin in ORIGINS.items() %}<option value="{{ key }}">{{ origin.name }}</option>{% endfor %}</select></label>
      <label>Cadena narrativa inicial <select name="situation_chain"><option value="">Determinada por la semilla</option>{% for key, situation in SITUATIONS.items() %}<option value="{{ key }}">{{ situation.name }}</option>{% endfor %}</select></label>
    </div>
    <label>Imperios rivales predefinidos, uno por línea
      <textarea name="predefined_empires" rows="5" maxlength="520" placeholder="Liga de Orión&#10;Concordato de Vega&#10;Colectivo Nadir"></textarea>
    </label>
    <button class="button button-primary" type="submit">Generar código de escenario</button>
  </form>
  {% if generated_scenario_code %}<div class="notice notice-success"><label>Código generado<textarea readonly rows="5" spellcheck="false">{{ generated_scenario_code }}</textarea></label><p>Abre Nueva partida y pégalo en «Escenario compartido».</p></div>{% endif %}
</section>

<section class="panel" aria-labelledby="weekly-title" data-tab-panel data-tab-id="escenarios-desafio" data-tab-label="Desafío semanal"><h2 id="weekly-title">{{ weekly_challenge.title }}</h2><p>Semilla <code>{{ weekly_challenge.seed }}</code>; {{ weekly_challenge.ai_count }} rivales; {{ weekly_challenge.galaxy_count }} galaxias; dificultad {{ weekly_challenge.difficulty }}; origen {{ ORIGINS[weekly_challenge.origin].name }}; victoria {{ weekly_challenge.victory_mode }}.</p><p>El desafío se calcula localmente a partir del año y la semana, de modo que todos obtienen la misma configuración sin cuentas ni telemetría.</p></section>

<section class="panel" aria-labelledby="mods-title" data-tab-panel data-tab-id="escenarios-mods" data-tab-label="Mods instalados"><h2 id="mods-title">Mods declarativos</h2><p>Los mods se leen desde la carpeta <code>mods</code>. Cada uno requiere manifiesto, versión compatible, espacio de nombres y catálogos JSON válidos. Nunca se ejecuta Python del mod.</p><p>Esta pantalla administra el contenido del universo actual. Para crear o editar los archivos, detén el servidor y abre <strong>Editor de mods</strong> en el panel wxPython; <kbd>Control+H</kbd> ofrece ayuda contextual completa.</p>{% if installed_mods %}<div class="card-grid">{% for mod in installed_mods %}<article class="entity-card"><h3>{{ mod.name }}</h3><p><code>{{ mod.id }}</code>, versión del mod {{ mod.version }}. {{ mod.description }}</p>{% if mod.valid %}<p>{{ 'Activado para este universo.' if mod.enabled else 'Instalado pero desactivado.' }}</p><p>{{ mod.content.origins|length }} orígenes, {{ mod.content.situations|length }} situaciones y {{ mod.content.scenarios|length }} escenarios.</p><form method="post" action="{{ url_for('mod_configure_action') }}"><input type="hidden" name="csrf_token" value="{{ csrf_token() }}"><input type="hidden" name="mod_id" value="{{ mod.id }}"><input type="hidden" name="enabled" value="{{ '0' if mod.enabled else '1' }}"><button class="button" type="submit">{{ 'Desactivar' if mod.enabled else 'Validar y activar' }}</button></form>{% else %}<p role="alert"><strong>Mod rechazado:</strong> {{ mod.error }}</p>{% endif %}</article>{% endfor %}</div><form method="post" action="{{ url_for('mod_safe_mode_action') }}"><input type="hidden" name="csrf_token" value="{{ csrf_token() }}"><button class="button button-danger" type="submit">Abrir este universo en modo seguro sin mods</button></form>{% else %}<p>No hay subcarpetas de mods instaladas.</p>{% endif %}</section>

{% if mod_content.scenarios %}<section class="panel" aria-labelledby="mod-scenarios-title" data-tab-panel data-tab-id="escenarios-activos" data-tab-label="Escenarios activos"><h2 id="mod-scenarios-title">Escenarios de mods activos</h2><div class="card-grid">{% for key, scenario in mod_content.scenarios.items() %}<article class="entity-card"><h3>{{ scenario.name }}</h3>{% if scenario.include_all_rules %}<p>Este escenario incluye automáticamente todas las reglas actuales y las que se registren en versiones futuras.</p>{% endif %}<p>Reglas efectivas: <code>{{ scenario.effective_rules }}</code></p><form method="post" action="{{ url_for('mod_scenario_action') }}"><input type="hidden" name="csrf_token" value="{{ csrf_token() }}"><input type="hidden" name="scenario_id" value="{{ key }}"><button class="button" type="submit">Aplicar sin borrar progreso</button></form></article>{% endfor %}</div></section>{% endif %}

<section class="panel" aria-labelledby="pwa-title" data-tab-panel data-tab-id="escenarios-instalacion" data-tab-label="Instalación web"><h2 id="pwa-title">Aplicación web instalable</h2><p>El manifiesto PWA y el trabajador de servicio almacenan únicamente estilos, scripts, icono, audio y ayuda estática. Las sesiones, recursos, acciones, exportaciones y estado del universo nunca entran en la caché.</p><p>El motor Flask y el panel wxPython siguen siendo necesarios para jugar y guardar.</p><button class="button" type="button" data-action="install-app" hidden>Instalar interfaz de Eclipse Imperia</button></section>
</div>
