<?php
$title = $title ?? 'Gestion des modules';
$modules = $modules ?? [];
$actionStatus = trim((string)($action_status ?? ''));
$actionModule = trim((string)($action_module ?? ''));

$statusMessage = '';
if ($actionStatus !== '' && $actionModule !== '') {
  $statusMessage = match ($actionStatus) {
    'install' => 'Le module a été installé et son essai d’un mois est démarré.',
    'enable' => 'Le module a été réactivé.',
    'disable' => 'Le module a été désactivé.',
    'uninstall' => 'Le module a été désinstallé de la plateforme.',
    'fraud_attempt' => 'tentative de fraude. Une notification a été transmise au Concepteur pour information',
    default => '',
  };
}

$statusAlertClass = $actionStatus === 'fraud_attempt' ? 'danger' : 'success';
?>
<style>
  .modules-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
    gap: 1rem;
  }

  .module-card {
    border: 1px solid #e2e8f0;
    border-radius: 1rem;
    background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
    box-shadow: 0 14px 34px rgba(15, 23, 42, 0.06);
    padding: 1.1rem;
  }

  .module-card__icon {
    width: 48px;
    height: 48px;
    border-radius: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: #eff6ff;
    color: #1d4ed8;
    font-size: 1.1rem;
  }

  .module-card__status {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    border-radius: 999px;
    padding: .38rem .78rem;
    font-size: .76rem;
    font-weight: 700;
  }

  .module-card__status.is-active { background: #dcfce7; color: #166534; }
  .module-card__status.is-trial { background: #e0f2fe; color: #075985; }
  .module-card__status.is-warning { background: #fef3c7; color: #92400e; }
  .module-card__status.is-muted { background: #e5e7eb; color: #374151; }

  .module-card__meta {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: .75rem;
    margin-top: 1rem;
  }

  .module-card__meta div {
    border: 1px solid #e2e8f0;
    border-radius: .85rem;
    padding: .8rem;
    background: rgba(255,255,255,.78);
  }

  .module-card__meta span {
    display: block;
    color: #64748b;
    font-size: .76rem;
    margin-bottom: .25rem;
  }

  .module-card__actions {
    display: flex;
    flex-wrap: wrap;
    gap: .65rem;
    margin-top: 1rem;
  }

  .module-card__actions form { margin: 0; }

  .module-banner {
    border-radius: 1rem;
    border: 1px solid #dbeafe;
    background: linear-gradient(135deg, #eff6ff 0%, #f8fafc 100%);
    padding: 1rem 1.1rem;
  }
</style>

<div class="d-flex flex-column flex-lg-row justify-content-between align-items-lg-center gap-3 mb-4">
  <div>
    <div class="text-uppercase text-muted small fw-semibold mb-1">public/settings</div>
    <h1 class="h3 mb-1">Gestion des modules</h1>
    <p class="text-muted mb-0">Installez, désactivez ou désinstallez les modules optionnels exploitables sur la plateforme existante.</p>
  </div>
  <a href="<?= htmlspecialchars(route_url('/settings')) ?>" class="btn btn-outline-secondary">
    <i class="fas fa-arrow-left me-1"></i> Retour aux paramètres
  </a>
</div>

<?php if ($statusMessage !== ''): ?>
  <div class="alert alert-<?= htmlspecialchars($statusAlertClass) ?> alert-dismissible fade show" role="alert">
    <i class="fas <?= $actionStatus === 'fraud_attempt' ? 'fa-triangle-exclamation' : 'fa-check-circle' ?> me-1"></i> <?= htmlspecialchars($statusMessage) ?>
    <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Fermer"></button>
  </div>
<?php endif; ?>

<div class="module-banner mb-4">
  <div class="fw-semibold mb-1"><i class="fas fa-circle-info me-1"></i>Règle d’activation commerciale</div>
  <div class="text-muted">Chaque module installé démarre avec un essai d’un mois. Après expiration, l’accès est bloqué et le module doit être activé par le développeur uniquement après paiement des modules.</div>
</div>

<div class="modules-grid">
  <?php foreach ($modules as $module): ?>
    <?php
      $statusClass = match ($module['status_code']) {
        'activated' => 'is-active',
        'trial_active' => 'is-trial',
        'trial_expired' => 'is-warning',
        default => 'is-muted',
      };
    ?>
    <article class="module-card">
      <div class="d-flex justify-content-between align-items-start gap-3">
        <div class="d-flex gap-3 align-items-start">
          <span class="module-card__icon"><i class="fas <?= htmlspecialchars((string)($module['icon_class'] ?? 'fa-cube')) ?>"></i></span>
          <div>
            <h2 class="h5 mb-1"><?= htmlspecialchars((string)$module['name']) ?></h2>
            <p class="text-muted mb-0"><?= htmlspecialchars((string)$module['description']) ?></p>
          </div>
        </div>
        <span class="module-card__status <?= $statusClass ?>">
          <i class="fas fa-shield-halved"></i><?= htmlspecialchars((string)$module['status_label']) ?>
        </span>
      </div>

      <div class="module-card__meta">
        <div>
          <span>Route</span>
          <strong><?= htmlspecialchars((string)($module['route_path'] ?? '—')) ?></strong>
        </div>
        <div>
          <span>Accès</span>
          <strong><?= !empty($module['accessible']) ? 'Autorisé' : 'Bloqué' ?></strong>
        </div>
        <div>
          <span>Essai</span>
          <strong>
            <?php if (!empty($module['trial_expires_at'])): ?>
              <?= htmlspecialchars(date('d/m/Y H:i', strtotime((string)$module['trial_expires_at']))) ?>
            <?php else: ?>
              Non démarré
            <?php endif; ?>
          </strong>
        </div>
        <div>
          <span>Jours restants</span>
          <strong><?= $module['trial_remaining_days'] !== null ? (int)$module['trial_remaining_days'] . ' jour(s)' : '—' ?></strong>
        </div>
      </div>

      <?php if (($module['status_code'] ?? '') === 'trial_expired'): ?>
        <div class="alert alert-warning mt-3 mb-0">
          <i class="fas fa-lock me-1"></i> Essai expiré. Le module doit être activé par le développeur uniquement après paiement des modules.
        </div>
      <?php elseif (!empty($module['activated'])): ?>
        <div class="alert alert-success mt-3 mb-0">
          <i class="fas fa-circle-check me-1"></i> Module activé côté développeur. L’accès reste permanent tant qu’il n’est pas désinstallé.
        </div>
      <?php endif; ?>

      <div class="module-card__actions">
        <?php if (empty($module['installed'])): ?>
          <form method="post" action="<?= htmlspecialchars(route_url('/settings/modules/install')) ?>">
            <input type="hidden" name="module_key" value="<?= htmlspecialchars((string)$module['key']) ?>">
            <input type="hidden" name="installation_code" value="">
            <button class="btn btn-primary js-open-install-modal" type="button" data-bs-toggle="modal" data-bs-target="#installModuleModal" data-module-key="<?= htmlspecialchars((string)$module['key']) ?>" data-module-name="<?= htmlspecialchars((string)$module['name'], ENT_QUOTES) ?>"><i class="fas fa-download me-1"></i> Installer</button>
          </form>
        <?php else: ?>
          <?php if (!empty($module['enabled'])): ?>
            <form method="post" action="<?= htmlspecialchars(route_url('/settings/modules/disable')) ?>">
              <input type="hidden" name="module_key" value="<?= htmlspecialchars((string)$module['key']) ?>">
              <button class="btn btn-outline-warning" type="submit"><i class="fas fa-pause me-1"></i> Désactiver</button>
            </form>
          <?php else: ?>
            <form method="post" action="<?= htmlspecialchars(route_url('/settings/modules/enable')) ?>">
              <input type="hidden" name="module_key" value="<?= htmlspecialchars((string)$module['key']) ?>">
              <button class="btn btn-outline-success" type="submit"><i class="fas fa-play me-1"></i> Réactiver</button>
            </form>
          <?php endif; ?>

          <form method="post" action="<?= htmlspecialchars(route_url('/settings/modules/uninstall')) ?>" onsubmit="return confirm('Désinstaller ce module de la plateforme ?');">
            <input type="hidden" name="module_key" value="<?= htmlspecialchars((string)$module['key']) ?>">
            <button class="btn btn-outline-danger" type="submit"><i class="fas fa-trash me-1"></i> Désinstaller</button>
          </form>

          <a class="btn btn-outline-secondary" href="<?= htmlspecialchars(route_url((string)$module['route_path'])) ?>">
            <i class="fas fa-arrow-up-right-from-square me-1"></i> Ouvrir
          </a>
        <?php endif; ?>
      </div>
    </article>
  <?php endforeach; ?>
</div>

<div class="modal fade" id="installModuleModal" tabindex="-1" aria-labelledby="installModuleModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered">
    <div class="modal-content border-0 shadow-lg" style="border-radius:1rem;overflow:hidden;">
      <div class="modal-header border-0 pb-0 px-4 pt-4">
        <div>
          <h5 class="modal-title fw-bold mb-1" id="installModuleModalLabel">Sécuriser l’installation</h5>
          <p class="text-muted small mb-0" id="installModuleModalSubtitle">Renseignez le code avant de lancer l’installation du module.</p>
        </div>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Fermer"></button>
      </div>
      <div class="modal-body px-4 py-3">
        <div class="mb-3">
          <label for="installModuleSecurityCode" class="form-label fw-semibold">Code d’installation</label>
          <input type="password" class="form-control" id="installModuleSecurityCode" autocomplete="one-time-code" inputmode="numeric" placeholder="Saisir le code requis">
        </div>
        <div class="small text-muted">Le module ne sera installé qu’après validation du code.</div>
      </div>
      <div class="modal-footer border-0 px-4 pb-4 pt-2 gap-2">
        <button type="button" class="btn btn-light" data-bs-dismiss="modal">Annuler</button>
        <button type="button" class="btn btn-primary" id="confirmInstallModuleBtn"><i class="fas fa-lock-open me-1"></i> Valider et installer</button>
      </div>
    </div>
  </div>
</div>

<script>
(function () {
  'use strict';

  const modalElement = document.getElementById('installModuleModal');
  if (!modalElement) {
    return;
  }

  const subtitle = document.getElementById('installModuleModalSubtitle');
  const codeInput = document.getElementById('installModuleSecurityCode');
  const confirmButton = document.getElementById('confirmInstallModuleBtn');
  let pendingInstallForm = null;

  document.querySelectorAll('.js-open-install-modal').forEach((button) => {
    button.addEventListener('click', () => {
      pendingInstallForm = button.closest('form');
      const moduleName = button.getAttribute('data-module-name') || 'ce module';
      subtitle.textContent = 'Renseignez le code avant de lancer l’installation de ' + moduleName + '.';
      codeInput.value = '';
    });
  });

  modalElement.addEventListener('shown.bs.modal', () => {
    window.setTimeout(() => codeInput.focus(), 120);
  });

  confirmButton?.addEventListener('click', () => {
    if (!pendingInstallForm) {
      return;
    }

    const hiddenCodeInput = pendingInstallForm.querySelector('input[name="installation_code"]');
    if (hiddenCodeInput) {
      hiddenCodeInput.value = codeInput.value.trim();
    }
    pendingInstallForm.submit();
  });

  modalElement.addEventListener('hidden.bs.modal', () => {
    pendingInstallForm = null;
    codeInput.value = '';
  });
})();
</script>