<?php
$title = $title ?? 'Alignement base de données';
$inspection = $inspection ?? [];
$missingTables = $inspection['missing_tables'] ?? [];
$presentTables = $inspection['present_tables'] ?? [];
$referenceSources = $inspection['reference_sources'] ?? [];
$updated = !empty($updated);
$resolvedCount = (int)($resolved_count ?? 0);
$remainingCount = (int)($remaining_count ?? ($inspection['missing_count'] ?? 0));
$resolvedColumnsCount = (int)($resolved_columns_count ?? 0);
$remainingColumnsCount = (int)($remaining_columns_count ?? ($inspection['missing_columns_count'] ?? 0));
$missingColumnsByTable = $inspection['missing_columns_by_table'] ?? [];
$updateReport = $update_report ?? null;
$canUpdate = !empty($missingTables) || !empty($missingColumnsByTable);
$hasMissingSchema = !empty($missingTables) || !empty($missingColumnsByTable);
?>
<style>
  .db-align-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 1rem;
    margin-bottom: 1rem;
  }

  .db-align-card {
    border: 1px solid #e2e8f0;
    border-radius: 1rem;
    background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
    padding: 1rem 1.1rem;
    box-shadow: 0 14px 30px rgba(15, 23, 42, 0.05);
  }

  .db-align-card__label {
    color: #64748b;
    font-size: .8rem;
    margin-bottom: .35rem;
  }

  .db-align-card__value {
    font-size: 1.8rem;
    font-weight: 800;
    color: #0f172a;
  }

  .db-align-list {
    display: grid;
    gap: .8rem;
  }

  .db-align-item {
    border: 1px solid #e2e8f0;
    border-radius: .95rem;
    padding: .95rem 1rem;
    background: #fff;
  }

  .db-align-source {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    border-radius: 999px;
    padding: .2rem .55rem;
    background: #e0f2fe;
    color: #075985;
    font-size: .72rem;
    font-weight: 700;
    margin: .25rem .35rem 0 0;
  }
</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">Diagnostic schéma</div>
    <h1 class="h3 mb-1">Alignement base de données</h1>
    <p class="text-muted mb-0">Vue de contrôle des tables attendues par rapport à la base active, pour préparer une mise à niveau propre.</p>
  </div>
  <div class="d-flex gap-2 flex-wrap">
    <form method="post" action="<?= htmlspecialchars(route_url('/settings/database-alignment/update')) ?>" class="m-0">
      <button type="submit" class="btn btn-primary"<?= !$canUpdate ? ' disabled' : '' ?>>
        <i class="fas fa-wrench me-1"></i> Lancer la mise à jour
      </button>
    </form>
    <a href="<?= htmlspecialchars(route_url('/settings/database-alignment')) ?>" class="btn btn-outline-primary">
      <i class="fas fa-rotate-right me-1"></i> Actualiser
    </a>
    <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>
</div>

<?php if ($updated): ?>
  <div class="alert alert-info mb-4">
    <i class="fas fa-screwdriver-wrench me-1"></i>
    Mise à jour exécutée. Tables régularisées : <strong><?= $resolvedCount ?></strong>. Colonnes régularisées : <strong><?= $resolvedColumnsCount ?></strong>. Tables encore manquantes : <strong><?= $remainingCount ?></strong>. Colonnes encore manquantes : <strong><?= $remainingColumnsCount ?></strong>.
  </div>
<?php endif; ?>

<div class="db-align-grid">
  <div class="db-align-card">
    <div class="db-align-card__label">Tables attendues</div>
    <div class="db-align-card__value"><?= (int)($inspection['expected_count'] ?? 0) ?></div>
  </div>
  <div class="db-align-card">
    <div class="db-align-card__label">Tables présentes</div>
    <div class="db-align-card__value"><?= (int)($inspection['present_count'] ?? 0) ?></div>
  </div>
  <div class="db-align-card">
    <div class="db-align-card__label">Tables manquantes</div>
    <div class="db-align-card__value" style="color:<?= !empty($inspection['missing_count']) ? '#b91c1c' : '#166534' ?>;"><?= (int)($inspection['missing_count'] ?? 0) ?></div>
  </div>
  <div class="db-align-card">
    <div class="db-align-card__label">Colonnes manquantes</div>
    <div class="db-align-card__value" style="color:<?= !empty($inspection['missing_columns_count']) ? '#b91c1c' : '#166534' ?>;"><?= (int)($inspection['missing_columns_count'] ?? 0) ?></div>
  </div>
  <div class="db-align-card">
    <div class="db-align-card__label">Analyse générée le</div>
    <div class="fw-semibold"><?= htmlspecialchars(date('d/m/Y H:i:s', strtotime((string)($inspection['generated_at'] ?? 'now')))) ?></div>
    <div class="small text-muted mt-2"><?= count($referenceSources) ?> source(s) de référence scannée(s)</div>
  </div>
</div>

<?php if ($hasMissingSchema): ?>
  <div class="alert alert-warning mb-4">
    <i class="fas fa-triangle-exclamation me-1"></i>
    Des éléments attendus du schéma ne sont pas présents dans la base actuelle. Une mise à niveau est recommandée avant exploitation complète des modules concernés.
  </div>

  <?php if (!empty($missingTables)): ?>

  <div class="card shadow-sm border-0 mb-4">
    <div class="card-header bg-white fw-semibold">Tables manquantes détectées</div>
    <div class="card-body">
      <div class="db-align-list">
        <?php foreach ($missingTables as $table): ?>
          <div class="db-align-item">
            <div class="d-flex justify-content-between align-items-start gap-3">
              <div>
                <div class="fw-bold"><?= htmlspecialchars((string)$table['name']) ?></div>
                <div class="small text-muted">Table attendue mais absente de la base active.</div>
              </div>
              <span class="badge text-bg-danger">Manquante</span>
            </div>
            <?php foreach (($table['sources'] ?? []) as $source): ?>
              <span class="db-align-source"><i class="fas fa-file-lines"></i><?= htmlspecialchars((string)$source) ?></span>
            <?php endforeach; ?>
          </div>
        <?php endforeach; ?>
      </div>
    </div>
  </div>
  <?php endif; ?>
<?php else: ?>
  <div class="alert alert-success mb-4">
    <i class="fas fa-circle-check me-1"></i>
    Aucune table ni colonne manquante n’a été détectée par rapport aux références chargées. Le schéma paraît aligné sur les besoins connus de l’application.
  </div>
<?php endif; ?>

<?php if (!empty($missingColumnsByTable)): ?>
  <div class="card shadow-sm border-0 mb-4">
    <div class="card-header bg-white fw-semibold">Colonnes manquantes détectées</div>
    <div class="card-body">
      <div class="db-align-list">
        <?php foreach ($missingColumnsByTable as $tableName => $columns): ?>
          <div class="db-align-item">
            <div class="fw-bold mb-2"><?= htmlspecialchars((string)$tableName) ?></div>
            <div class="small text-muted mb-3">Colonnes attendues mais absentes de la table actuelle.</div>
            <div class="d-flex flex-wrap gap-2">
              <?php foreach ($columns as $column): ?>
                <span class="badge rounded-pill text-bg-warning border px-3 py-2"><?= htmlspecialchars((string)($column['name'] ?? '')) ?></span>
              <?php endforeach; ?>
            </div>
            <div class="mt-3">
              <?php foreach ($columns as $column): ?>
                <?php foreach (($column['sources'] ?? []) as $source): ?>
                  <span class="db-align-source"><i class="fas fa-file-lines"></i><?= htmlspecialchars((string)$source) ?></span>
                <?php endforeach; ?>
              <?php endforeach; ?>
            </div>
          </div>
        <?php endforeach; ?>
      </div>
    </div>
  </div>
<?php endif; ?>

<?php if (is_array($updateReport)): ?>
  <div class="card shadow-sm border-0 mb-4">
    <div class="card-header bg-white fw-semibold">Journal de la dernière mise à jour</div>
    <div class="card-body">
      <div class="row g-3 mb-3">
        <div class="col-md-3"><div class="db-align-item py-3"><div class="small text-muted">Étapes exécutées</div><div class="fw-bold"><?= count($updateReport['executed_steps'] ?? []) ?></div></div></div>
        <div class="col-md-3"><div class="db-align-item py-3"><div class="small text-muted">Tables corrigées</div><div class="fw-bold"><?= count($updateReport['resolved_tables'] ?? []) ?></div></div></div>
        <div class="col-md-3"><div class="db-align-item py-3"><div class="small text-muted">Colonnes corrigées</div><div class="fw-bold"><?= count($updateReport['resolved_columns'] ?? []) ?></div></div></div>
        <div class="col-md-3"><div class="db-align-item py-3"><div class="small text-muted">Reste à corriger</div><div class="fw-bold"><?= (int)($updateReport['remaining_count'] ?? 0) ?> table(s), <?= (int)($updateReport['remaining_columns_count'] ?? 0) ?> colonne(s)</div></div></div>
      </div>

      <?php if (!empty($updateReport['executed_steps'])): ?>
        <div class="mb-3">
          <div class="fw-semibold mb-2">Étapes techniques</div>
          <div class="d-flex flex-wrap gap-2">
            <?php foreach (($updateReport['executed_steps'] ?? []) as $step): ?>
              <span class="badge rounded-pill text-bg-light border px-3 py-2"><?= htmlspecialchars((string)$step) ?></span>
            <?php endforeach; ?>
          </div>
        </div>
      <?php endif; ?>

      <?php if (!empty($updateReport['resolved_tables'])): ?>
        <div class="mb-3">
          <div class="fw-semibold mb-2">Tables régularisées</div>
          <div class="d-flex flex-wrap gap-2">
            <?php foreach (($updateReport['resolved_tables'] ?? []) as $tableName): ?>
              <span class="badge rounded-pill text-bg-success px-3 py-2"><?= htmlspecialchars((string)$tableName) ?></span>
            <?php endforeach; ?>
          </div>
        </div>
      <?php endif; ?>

      <?php if (!empty($updateReport['resolved_columns'])): ?>
        <div>
          <div class="fw-semibold mb-2">Colonnes régularisées</div>
          <div class="d-flex flex-wrap gap-2">
            <?php foreach (array_slice(($updateReport['resolved_columns'] ?? []), 0, 60) as $columnRef): ?>
              <span class="badge rounded-pill text-bg-info px-3 py-2"><?= htmlspecialchars((string)$columnRef) ?></span>
            <?php endforeach; ?>
          </div>
          <?php if (count($updateReport['resolved_columns'] ?? []) > 60): ?>
            <div class="small text-muted mt-2">Affichage limité aux 60 premières colonnes corrigées.</div>
          <?php endif; ?>
        </div>
      <?php endif; ?>
    </div>
  </div>
<?php endif; ?>

<div class="card shadow-sm border-0 mb-4">
  <div class="card-header bg-white fw-semibold">Références utilisées pour la comparaison</div>
  <div class="card-body">
    <div class="small text-muted mb-3">Le diagnostic compare la base courante avec les CREATE TABLE détectés dans le dump principal et dans le code applicatif.</div>
    <div class="db-align-list">
      <?php foreach ($referenceSources as $source): ?>
        <div class="db-align-item py-2 px-3">
          <i class="fas fa-file-code text-primary me-2"></i><?= htmlspecialchars((string)str_replace('\\', '/', $source)) ?>
        </div>
      <?php endforeach; ?>
    </div>
  </div>
</div>

<?php if (!empty($presentTables)): ?>
  <div class="card shadow-sm border-0">
    <div class="card-header bg-white fw-semibold">Échantillon des tables déjà présentes</div>
    <div class="card-body">
      <div class="d-flex flex-wrap gap-2">
        <?php foreach (array_slice($presentTables, 0, 30) as $table): ?>
          <span class="badge rounded-pill text-bg-light border px-3 py-2"><?= htmlspecialchars((string)$table['name']) ?></span>
        <?php endforeach; ?>
      </div>
      <?php if (count($presentTables) > 30): ?>
        <div class="small text-muted mt-3">Affichage limité aux 30 premières tables présentes pour garder la page lisible.</div>
      <?php endif; ?>
    </div>
  </div>
<?php endif; ?>