<!-- Bloc Mises a jour (canal stable + canal beta Patreon fusionnes) -->
@if (config.updateCheckEnabled || licenseStatus?.enabled) {
  <section class="card">
    <h2>Mises a jour</h2>
    <p class="hint">Verifie aupres du registry Docker si une nouvelle version
      des conteneurs (core, brain, web) est disponible. Postgres et MinIO sont
    exclus — ils sont mis a jour manuellement.</p>
    @if (licenseSuccess) {
      <div class="alert alert-success">
        <lucide-icon [img]="Check" [size]="16"></lucide-icon>
        <span>{{ licenseSuccess }}</span>
      </div>
    }
    <!-- ====================================================== -->
    <!-- Sous-section : canal stable                              -->
    <!-- ====================================================== -->
    @if (config.updateCheckEnabled) {
      <div class="channel-block">
        <h3 class="channel-title">Canal stable</h3>
        <div class="form-row">
          <button type="button" class="btn-secondary" (click)="checkUpdates()" [disabled]="updateChecking">
            <lucide-icon [img]="RefreshCw" [size]="14"></lucide-icon>
            <span>{{ updateChecking ? 'Verification...' : 'Verifier maintenant' }}</span>
          </button>
        </div>
        @if (updateStatus && !updateStatus.enabled) {
          <div class="hint">
            Feature non configuree (WATCHTOWER_TOKEN absent).
          </div>
        }
        @if (updateStatus?.enabled) {
          <div>
            @if (updateStatus?.updateAvailable) {
              <div class="alert alert-success">
                <lucide-icon [img]="Download" [size]="16"></lucide-icon>
                <span>Une mise a jour est disponible.</span>
              </div>
            }
            @if (updateStatus?.anyUnknown && !updateStatus?.updateAvailable) {
              <div class="alert alert-warn">
                <lucide-icon [img]="Download" [size]="16"></lucide-icon>
                <span>Verification impossible (baseline absente ou registry injoignable).</span>
              </div>
            }
            @if (!updateStatus?.updateAvailable && !updateStatus?.anyUnknown) {
              <div class="hint">
                Tout est a jour (verifie le {{ updateStatus?.checkedAt | date:'short' }}).
              </div>
            }
            @if (updateStatus?.updateAvailable) {
              <div class="form-row">
                <button type="button" class="btn-primary" (click)="applyUpdate()" [disabled]="updateApplying">
                  <lucide-icon [img]="Download" [size]="16"></lucide-icon>
                  <span>{{ updateApplying ? 'Mise a jour en cours...' : 'Mettre a jour maintenant' }}</span>
                </button>
              </div>
            }
            @if (updateMessage) {
              <div class="alert alert-success">
                <lucide-icon [img]="Check" [size]="16"></lucide-icon>
                <span>{{ updateMessage }}</span>
              </div>
            }
          </div>
        }
      </div>
    }
    <!-- ====================================================== -->
    <!-- Sous-section : canal beta (Patreon)                      -->
    <!-- ====================================================== -->
    @if (licenseStatus?.enabled) {
      <div class="channel-block">
        <h3 class="channel-title">
          <lucide-icon [img]="Heart" [size]="16"></lucide-icon>
          Canal beta &mdash; reserve aux patrons
        </h3>
        <p class="hint">
          Soutiens LoreMind sur Patreon pour acceder aux nouvelles features en avant-premiere.
          Le tier <strong>Compagnon</strong> (7&euro;/mois) ou superieur debloque ce canal.
        </p>
        <!-- Pas de licence installee -->
        @if (licenseStatus?.status === 'NONE') {
          <div class="form-row">
            <button type="button" class="btn-primary" (click)="connectPatreon()">
              <lucide-icon [img]="Link2" [size]="16"></lucide-icon>
              <span>Connecter mon compte Patreon</span>
            </button>
          </div>
          <p class="hint">
            Une nouvelle fenetre va s'ouvrir vers Patreon. Apres autorisation, copie le token affiche
            et colle-le ci-dessous.
          </p>
          <div class="form-row">
            <label for="license-jwt">Token Patreon</label>
            <input
              id="license-jwt"
              type="text"
              [(ngModel)]="licenseJwtInput"
              placeholder="eyJhbGciOiJFZERTQS..."
              autocomplete="off"
              >
          </div>
          <div class="form-row">
            <button type="button" class="btn-primary" (click)="installLicense()" [disabled]="!licenseJwtInput.trim()">
              <lucide-icon [img]="Check" [size]="16"></lucide-icon>
              <span>Activer la licence</span>
            </button>
          </div>
          @if (licenseError) {
            <div class="alert alert-error">
              <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
              <span>{{ licenseError }}</span>
            </div>
          }
        }
        <!-- Licence installee (VALID / GRACE / EXPIRED / UNVERIFIABLE) -->
        @if (licenseStatus && licenseStatus.status !== 'NONE') {
          @if (licenseStatus.status === 'VALID') {
            <div class="alert alert-success">
              <lucide-icon [img]="Check" [size]="16"></lucide-icon>
              <span>Compte Patreon connecte. Tier {{ tierLabel(licenseStatus.tierId) }} actif.</span>
            </div>
          }
          @if (licenseStatus.status === 'GRACE') {
            <div class="alert alert-warn">
              <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
              <span>
                Connexion Patreon expiree, mais acces beta maintenu pendant la periode de tolerance.
                Verifie que ton abonnement Patreon est toujours actif et clique sur "Verifier maintenant".
              </span>
            </div>
          }
          @if (licenseStatus.status === 'EXPIRED') {
            <div class="alert alert-error">
              <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
              <span>
                Connexion Patreon expiree depuis trop longtemps. Reconnecte-toi pour retrouver l'acces beta.
              </span>
            </div>
          }
          @if (licenseStatus.status === 'UNVERIFIABLE') {
            <div class="alert alert-error">
              <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
              <span>Le token installe ne peut plus etre verifie. Reconnecte-toi.</span>
            </div>
          }
          <ul class="license-info">
            @if (licenseStatus.tierId) {
              <li><strong>Tier :</strong> {{ tierLabel(licenseStatus.tierId) }}</li>
            }
            @if (licenseStatus.expiresAt) {
              <li>
                <strong>Validite :</strong>
                jusqu'au {{ formatDate(licenseStatus.expiresAt) }}
                @if (daysUntilExpiry !== null && daysUntilExpiry > 0) {
                  <span>
                    (renouvellement dans {{ daysUntilExpiry }} jour@if (daysUntilExpiry > 1) {
                    <span>s</span>
                    })
                  </span>
                }
              </li>
            }
            @if (licenseStatus.lastRefreshAttemptAt) {
              <li>
                <strong>Dernier refresh :</strong>
                {{ formatDate(licenseStatus.lastRefreshAttemptAt) }}
                @if (licenseStatus.lastRefreshSucceeded === true) {
                  <span class="badge-ok">OK</span>
                }
                @if (licenseStatus.lastRefreshSucceeded === false) {
                  <span class="badge-warn">echec</span>
                }
              </li>
            }
          </ul>
          <div class="form-row form-row-inline">
            <label class="checkbox">
              <input
                type="checkbox"
                [checked]="licenseStatus.betaChannelEnabled"
                (change)="toggleBetaChannel(!licenseStatus.betaChannelEnabled)"
                [disabled]="licenseStatus.status !== 'VALID' && licenseStatus.status !== 'GRACE'"
                >
              <span>Activer le canal beta</span>
            </label>
          </div>
          <div class="form-row form-row-actions">
            <button type="button" class="btn-secondary" (click)="refreshLicense()" [disabled]="licenseLoading">
              <lucide-icon [img]="RefreshCw" [size]="14"></lucide-icon>
              <span>{{ licenseLoading ? 'Verification...' : 'Verifier maintenant' }}</span>
            </button>
            <button type="button" class="btn-secondary btn-danger" (click)="disconnectPatreon()">
              <lucide-icon [img]="Unlink" [size]="14"></lucide-icon>
              <span>Deconnecter Patreon</span>
            </button>
          </div>
          <!-- Etat du canal beta -->
          @if (licenseStatus.betaChannelEnabled) {
            <div class="beta-status">
              @if (betaChecking) {
                <div class="hint">Verification des images beta...</div>
              }
              @if (!betaChecking && betaStatus && !betaStatus.enabled) {
                <div class="hint">
                  Indisponible : {{ betaStatus.disabledReason }}
                </div>
              }
              @if (!betaChecking && betaStatus?.enabled) {
                <div>
                  @if (betaStatus?.anyUnknown) {
                    <div class="alert alert-warn">
                      <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
                      <span>Verification beta impossible (registry beta injoignable ou baseline absente).</span>
                    </div>
                  }
                </div>
              }
            </div>
          }
          <!-- Bascule de canal (stable <-> beta) via sidecar switcher -->
          @if (channelStatus) {
            <div class="channel-switch">
              <div class="channel-current">
                <span class="channel-label">Canal actuel :</span>
                <span class="channel-badge"
                  [class.channel-stable]="channelStatus.currentChannel === 'stable'"
                  [class.channel-beta]="channelStatus.currentChannel === 'beta'">
                  {{ channelStatus.currentChannel === 'beta' ? 'Bêta' : 'Stable' }}
                </span>
              </div>
              <!-- Sidecar dispo : boutons d'action -->
              @if (channelStatus.switcherAvailable) {
                <!-- On stable -> proposer passage beta (uniquement si licence active) -->
                @if (channelStatus.currentChannel === 'stable') {
                  <button
                    type="button" class="btn-primary"
                    [disabled]="switchInFlight"
                    (click)="requestChannelSwitch('beta')">
                    <lucide-icon [img]="Download" [size]="14"></lucide-icon>
                    <span>{{ switchInFlight ? 'Bascule en cours...' : 'Passer sur le canal beta' }}</span>
                  </button>
                }
                <!-- On beta -> proposer retour stable -->
                @if (channelStatus.currentChannel === 'beta') {
                  <button
                    type="button" class="btn-secondary"
                    [disabled]="switchInFlight"
                    (click)="requestChannelSwitch('stable')">
                    <lucide-icon [img]="ArrowLeft" [size]="14"></lucide-icon>
                    <span>{{ switchInFlight ? 'Bascule en cours...' : 'Repasser sur le canal stable' }}</span>
                  </button>
                }
                <!-- Switch en cours : on prévient que la page va se rendre injoignable -->
                @if (switchInFlight) {
                  <div class="alert alert-warn">
                    <lucide-icon [img]="RefreshCw" [size]="16"></lucide-icon>
                    <span>Bascule en cours. L'application va etre indisponible 10 a 30 secondes — la page se rechargera automatiquement quand le nouveau Core sera pret.</span>
                  </div>
                }
                <!-- Erreur eventuelle remontee par le sidecar -->
                @if (switchError && !switchInFlight) {
                  <div class="alert alert-error">
                    <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
                    <span>{{ switchError }}</span>
                  </div>
                }
              }
              <!-- Sidecar PAS dispo : fallback instructions manuelles (vieilles installs) -->
              @if (!channelStatus.switcherAvailable) {
                <div class="alert alert-warn">
                  <lucide-icon [img]="AlertCircle" [size]="16"></lucide-icon>
                  <span>
                    Le sidecar de bascule n'est pas installe. Pour beneficier du switch
                    automatique, recupere le dernier <code>docker-compose.yml</code> du repo
                    et fais <code>docker compose pull &amp;&amp; docker compose up -d</code> une
                    fois. Sinon, bascule manuellement en editant <code>IMAGE_NAMESPACE</code>
                    dans ton <code>.env</code> (<code>igmlcreation/loremind-</code> pour stable,
                    <code>igmlcreation/loremind-beta-</code> pour beta).
                  </span>
                </div>
              }
            </div>
          }
        }
      </div>
    }
  </section>
}
