<% layout('layouts/main') %>
<% const adminBase = typeof adminBaseUrl !== 'undefined' ? adminBaseUrl : '/admin'; %>
<% const rows = suite.rows || {}; %>
<% const summaries = suite.summaries || {}; %>
<% const context = suite.context || { clients: [], employees: [], interventions: [] }; %>
<% const personName = (item) => [item?.first_name, item?.last_name].filter(Boolean).join(' ') || item?.email || 'Non assigné'; %>
<% const clientName = (item) => item?.company_name || personName(item); %>
<% const holderName = (item) => [item?.holder_first_name, item?.holder_last_name].filter(Boolean).join(' ') || 'Non assigné'; %>
<% const assignedName = (item) => [item?.assigned_first_name, item?.assigned_last_name].filter(Boolean).join(' ') || 'Non assigné'; %>
<% const timeSourceLabels = { manual: 'Manuel', paper: 'Papier', excel: 'Excel', timer: 'Timbreuse', mobile: 'Mobile', admin: 'Admin' }; %>
<% const timeDate = (item) => item?.work_date || (item?.starts_at ? String(item.starts_at).slice(0, 10) : item?.created_at); %>
<% const timeRange = (item) => [item?.starts_at ? String(item.starts_at).slice(11, 16) : '', item?.ends_at ? String(item.ends_at).slice(11, 16) : ''].filter(Boolean).join(' - '); %>
<% const stopsLabel = (value) => { try { const parsed = JSON.parse(value || '[]'); return Array.isArray(parsed) ? parsed.map((stop) => [stop.label, stop.time, stop.duration].filter(Boolean).join(' · ')).join(' / ') : ''; } catch (error) { return ''; } }; %>
<% const suiteAlertCount = (rows.clientAlerts || []).length + (rows.contractAlerts || []).length; %>
<div class="app-shell">
  <%- partial('partials/admin-nav') %>
  <section class="content suite-admin-page">
    <div class="page-head suite-command-head">
      <div>
        <p class="eyebrow">Suite métier</p>
        <h1>Piloter l’entreprise sans dépendre d’outils externes.</h1>
        <p class="muted">Fiduciaire, stock, achats, terrain, contrats, qualité, planning, RH, support, marketing et modèles de communication sont regroupés dans un cockpit multi-tenant.</p>
      </div>
      <div class="actions">
        <a class="button secondary" href="<%= adminBase %>/suite/fiduciaire.csv">Export fiduciaire</a>
        <a class="button secondary" href="<%= adminBase %>/suite/fiduciaire-avance.csv">Export avancé</a>
      </div>
    </div>

    <section class="suite-command-grid">
      <article><span>Actifs suivis</span><strong><%= summaries.assets.total || 0 %></strong><small><%= ui.money(summaries.assets.value || 0) %> valeur remplacement</small></article>
      <article><span>Achats ouverts</span><strong><%= ui.money(summaries.suppliers.amount || 0) %></strong><small><%= summaries.suppliers.total || 0 %> commande(s)</small></article>
      <article><span>Heures terrain</span><strong><%= ui.duration(summaries.time.minutes || 0) %></strong><small><%= ui.money(summaries.time.expenses || 0) %> frais ce mois</small></article>
      <article><span>Contrats actifs</span><strong><%= ui.money(summaries.contracts.monthly || 0) %></strong><small><%= summaries.contracts.total || 0 %> revenu mensuel</small></article>
      <article><span>Relances à surveiller</span><strong><%= summaries.reminders.total || 0 %></strong><small><%= ui.money(summaries.reminders.amount || 0) %> en retard</small></article>
      <article><span>Qualité 90 jours</span><strong><%= Number(summaries.quality.score || 0).toFixed(1) %>%</strong><small><%= summaries.quality.total || 0 %> rapport(s)</small></article>
      <article><span>GED</span><strong><%= summaries.documents.total || 0 %></strong><small>document(s) classé(s)</small></article>
      <article><span>Clés sensibles</span><strong><%= summaries.keys.total || 0 %></strong><small>à suivre terrain</small></article>
      <article><span>Réclamations</span><strong><%= summaries.complaints.total || 0 %></strong><small>dossier(s) ouvert(s)</small></article>
      <article><span>Tournées à venir</span><strong><%= summaries.routes.total || 0 %></strong><small><%= ui.duration(summaries.routes.minutes || 0) %> de trajet</small></article>
      <article><span>RH à suivre</span><strong><%= summaries.hr.total || 0 %></strong><small>documents et échéances</small></article>
      <article><span>Support ouvert</span><strong><%= summaries.support.total || 0 %></strong><small>SLA à surveiller</small></article>
      <article><span>Marketing</span><strong><%= summaries.marketing.conversions || 0 %></strong><small>conversions suivies</small></article>
    </section>

    <details class="panel suite-alert-cockpit">
      <summary class="suite-alert-summary">
        <div>
          <p class="eyebrow">Actions à surveiller</p>
          <h2>Relances clients et cycles récurrents</h2>
        </div>
        <span class="badge"><%= suiteAlertCount %> alerte(s)</span>
      </summary>
      <div class="suite-alert-grid">
        <article>
          <strong>Factures en retard</strong>
          <% (rows.clientAlerts || []).slice(0, 4).forEach((item) => { %>
            <span><%= item.first_name %> <%= item.last_name %> · <%= item.invoice_number %> · <%= ui.money(Number(item.total || 0) - Number(item.paid_amount || 0)) %> · échéance <%= ui.date(item.due_date) %></span>
          <% }) %>
          <% if (!(rows.clientAlerts || []).length) { %><span>Aucune relance urgente aujourd’hui.</span><% } %>
        </article>
        <article>
          <strong>Contrats à générer ou renouveler</strong>
          <% (rows.contractAlerts || []).slice(0, 4).forEach((item) => { %>
            <span><%= item.title %> · <%= clientName(item) %> · intervention <%= item.next_intervention_on || 'à fixer' %> · facture <%= item.next_invoice_on || 'à fixer' %></span>
          <% }) %>
          <% if (!(rows.contractAlerts || []).length) { %><span>Aucun cycle contrat en alerte.</span><% } %>
        </article>
      </div>
      <div class="suite-module-actions"><a class="button secondary small" href="<%= adminBase %>/factures">Voir les factures</a></div>
    </details>

    <nav class="suite-module-nav" aria-label="Modules Suite métier">
      <a href="#fiduciaire">Fiduciaire</a>
      <a href="#stocks">Stocks</a>
      <a href="#achats">Achats</a>
      <a href="#pointage">Pointage</a>
      <a href="#contrats">Contrats</a>
      <a href="#qualite">Qualité</a>
      <a href="#checklists">Checklists</a>
      <a href="#ged">GED</a>
      <a href="#cles">Clés</a>
      <a href="#reclamations">Réclamations</a>
      <a href="#planning">Planning</a>
      <a href="#rh">RH</a>
      <a href="#support">Support</a>
      <a href="#marketing">Marketing</a>
      <a href="#modeles">Modèles</a>
    </nav>

    <div class="suite-modules-list" data-module-workspace data-module-workspace-label="Suite métier">
    <details class="suite-module-section suite-module-drawer" id="fiduciaire">
      <summary class="suite-module-title">
        <div><p class="eyebrow">Portail fiduciaire</p><h2>Lecture, préparation et exports contrôlés.</h2></div>
        <span class="suite-module-toggle">Ouvrir</span>
      </summary>
      <div class="suite-module-actions">
        <a class="button secondary" href="<%= adminBase %>/suite/fiduciaire.csv">Télécharger CSV</a>
        <a class="button secondary" href="<%= adminBase %>/suite/fiduciaire-avance.csv">CSV avancé complet</a>
      </div>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/fiduciaire" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Type d’export<select name="export_type"><option value="journal">Journal comptable</option><option value="tva">TVA</option><option value="rh">Dossier RH</option><option value="dossier_annuel">Dossier annuel</option></select></label>
          <div class="form-grid two"><label>Du<input type="date" name="period_from"></label><label>Au<input type="date" name="period_to"></label></div>
          <label>Notes de transmission<textarea name="notes" rows="3" placeholder="Période transmise à la fiduciaire, contrôles effectués, pièces manquantes..."></textarea></label>
          <button>Préparer l’export</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Exports récents</h3>
          <div class="suite-list">
            <% rows.fiduciaryExports.forEach((item) => { %>
              <article><strong><%= item.export_type %></strong><span><%= ui.date(item.created_at, true) %> · <%= item.period_from || 'début' %> au <%= item.period_to || 'jour' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
            <% if (!rows.fiduciaryExports.length) { %><p class="empty-state"><strong>Aucun export</strong><span>Préparez un export pour la fiduciaire.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="stocks">
      <summary class="suite-module-title"><div><p class="eyebrow">Stocks & actifs</p><h2>Matériel, produits, véhicules et machines.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/stocks" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two"><label>Type<select name="asset_type"><option value="product">Produit</option><option value="material">Matériel</option><option value="vehicle">Véhicule</option><option value="machine">Machine</option></select></label><label>Statut<select name="status"><option value="active">Actif</option><option value="reserved">Réservé</option><option value="maintenance">Maintenance</option><option value="archived">Archivé</option></select></label></div>
          <label>Nom<input name="name" required placeholder="Aspirateur, autolaveuse, produit vitres, consommable..."></label>
          <div class="form-grid three"><label>Référence<input name="sku"></label><label>Quantité<input type="number" step="0.01" name="quantity" value="1"></label><label>Unité<input name="unit" value="pce"></label></div>
          <div class="form-grid two"><label>Lieu<input name="location"></label><label>Prochaine maintenance<input type="date" name="next_service_on"></label></div>
          <div class="form-grid two"><label>Prix achat<input type="number" step="0.01" name="purchase_price"></label><label>Valeur remplacement<input type="number" step="0.01" name="replacement_value"></label></div>
          <label>Notes<textarea name="notes" rows="3"></textarea></label>
          <button>Ajouter au stock</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Actifs suivis</h3>
          <div class="suite-list">
            <% rows.assets.forEach((item) => { %>
              <article><strong><%= item.name %></strong><span><%= ui.label(item.asset_type) %> · <%= item.quantity %> <%= item.unit %> · <%= item.location || 'Lieu non renseigné' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="achats">
      <summary class="suite-module-title"><div><p class="eyebrow">Achats fournisseurs</p><h2>Commandes, montants et bons de livraison.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/achats" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Fournisseur<input name="supplier_name" required></label>
          <div class="form-grid two"><label>N° commande<input name="order_number"></label><label>Statut<select name="status"><option value="ordered">Commandée</option><option value="partial">Partielle</option><option value="delivered">Livrée</option><option value="invoiced">Facturée</option><option value="paid">Payée</option></select></label></div>
          <div class="form-grid three"><label>Date commande<input type="date" name="order_date"></label><label>Date livraison<input type="date" name="delivery_date"></label><label>Total<input type="number" step="0.01" name="total_amount"></label></div>
          <label>Bon de livraison<input name="delivery_note_number"></label>
          <label>Notes<textarea name="notes" rows="3"></textarea></label>
          <button>Créer la commande</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Commandes récentes</h3>
          <div class="suite-list">
            <% rows.orders.forEach((item) => { %>
              <article><strong><%= item.supplier_name %></strong><span><%= item.order_number || 'Sans numéro' %> · <%= ui.money(item.total_amount) %> · BL <%= item.delivery_note_number || 'à venir' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="pointage">
      <summary class="suite-module-title"><div><p class="eyebrow">Pointage terrain</p><h2>Heures, feuilles papier, reprises Excel et frais.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/pointage" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two">
            <label>Employé<select name="user_id"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label>
            <label>Intervention<select name="intervention_id"><option value="">Hors intervention</option><% context.interventions.forEach((item) => { %><option value="<%= item.id %>"><%= item.service_type || 'Intervention' %> · <%= item.address || '' %></option><% }) %></select></label>
          </div>
          <div class="form-grid four"><label>Date<input type="date" name="work_date"></label><label>Début<input type="time" name="start_time"></label><label>Fin<input type="time" name="end_time"></label><label>Total heures<input name="duration" placeholder="7.5, 7h30 ou 7:30"></label></div>
          <div class="form-grid three"><label>Pause min<input type="number" name="break_minutes" value="0"></label><label>Source<select name="source_type"><option value="manual">Saisie manuelle</option><option value="paper">Feuille papier</option><option value="excel">Reprise Excel</option><option value="timer">Timbreuse</option><option value="mobile">Mobile terrain</option><option value="admin">Admin</option></select></label><label>Statut<select name="status"><option value="submitted">En validation</option><option value="approved">Validé</option><option value="draft">Brouillon</option></select></label></div>
          <div class="form-grid two"><label>Frais CHF<input type="number" step="0.01" name="expense_amount"></label><label>Motif frais<input name="expense_note"></label></div>
          <label>Note travail<textarea name="work_note" rows="3" placeholder="Résumé, reprise depuis Excel, référence feuille papier, remarque RH..."></textarea></label>
          <button>Enregistrer le pointage</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Pointages récents</h3>
          <div class="suite-list">
            <% rows.timeEntries.forEach((item) => { %>
              <article class="suite-time-entry">
                <strong><%= personName(item) %></strong>
                <span><%= ui.date(timeDate(item), true) %> · <%= ui.duration(item.resolved_minutes || 0) %><%= timeRange(item) ? ` · ${timeRange(item)}` : '' %> · <%= timeSourceLabels[item.source_type] || ui.label(item.source_type) %> · frais <%= ui.money(item.expense_amount) %><% if (item.service_type) { %> · <%= item.service_type %><% } %></span>
                <em><%= ui.label(item.status) %></em>
                <% if (item.status !== 'exported') { %>
                  <form method="post" action="<%= adminBase %>/suite/pointage/<%= item.id %>/statut" class="inline-suite-status-form">
                    <input type="hidden" name="_csrf" value="<%= csrfToken %>">
                    <select name="status">
                      <% ['draft','submitted','approved','exported'].forEach((status) => { %><option value="<%= status %>" <%= item.status === status ? 'selected' : '' %>><%= ui.label(status) %></option><% }) %>
                    </select>
                    <button class="secondary">Mettre à jour</button>
                  </form>
                <% } %>
              </article>
            <% }) %>
            <% if (!rows.timeEntries.length) { %><p class="empty-state"><strong>Aucun pointage</strong><span>Les heures saisies par les employés apparaîtront ici.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="contrats">
      <summary class="suite-module-title"><div><p class="eyebrow">Contrats récurrents</p><h2>Renouvellement automatique, préavis et prochaine facture.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/contrats" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Client<select name="client_id"><option value="">Client à rattacher</option><% context.clients.forEach((client) => { %><option value="<%= client.id %>"><%= clientName(client) %></option><% }) %></select></label>
          <div class="form-grid two"><label>N° contrat<input name="contract_number" placeholder="CTR-2026-001"></label><label>Titre du contrat<input name="title" required></label></div>
          <div class="form-grid two"><label>Service<input name="service_type" placeholder="Nettoyage régulier, fin de bail..."></label><label>Règle de récurrence<input name="recurrence_rule" value="Mensuel"></label></div>
          <div class="form-grid two"><label>Adresse de service<input name="service_address"></label><label>Contact sur site<input name="contact_person"></label></div>
          <div class="form-grid three"><label>Cycle<select name="billing_cycle"><option value="monthly">Mensuel</option><option value="quarterly">Trimestriel</option><option value="yearly">Annuel</option></select></label><label>Intervalle<input type="number" name="recurrence_interval" value="1" min="1"></label><label>Statut<select name="status"><option value="active">Actif</option><option value="draft">Brouillon</option><option value="renewal_due">Renouvellement</option><option value="paused">En pause</option></select></label></div>
          <div class="form-grid three"><label>Début<input type="date" name="starts_on"></label><label>Renouvellement<input type="date" name="renews_on"></label><label>Préavis jours<input type="number" name="notice_days" value="60"></label></div>
          <div class="form-grid three"><label>Mensuel CHF<input type="number" step="0.01" name="monthly_amount"></label><label>Prochaine intervention<input type="date" name="next_intervention_on"></label><label>Prochaine facture<input type="date" name="next_invoice_on"></label></div>
          <label class="check premium-check"><input type="checkbox" name="auto_create_interventions" value="1" checked><span><strong>Préparer automatiquement les prochaines interventions</strong><small>Le cycle crée des interventions planifiées, sans envoi client automatique.</small></span></label>
          <label class="check premium-check"><input type="checkbox" name="auto_invoice_enabled" value="1"><span><strong>Préparer une facture brouillon au cycle</strong><small>L’entreprise vérifie puis envoie la facture manuellement.</small></span></label>
          <label>Notes<textarea name="notes" rows="3"></textarea></label>
          <button>Créer le contrat</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Contrats suivis</h3>
          <div class="suite-list">
            <% rows.contracts.forEach((item) => { %>
              <article>
                <strong><%= item.title %></strong>
                <span><%= clientName(item) %> · <%= ui.money(item.monthly_amount) %>/mois · prochaine intervention <%= item.next_intervention_on || 'à fixer' %> · prochaine facture <%= item.next_invoice_on || 'à fixer' %></span>
                <em><%= ui.label(item.status) %></em>
                <form method="post" action="<%= adminBase %>/suite/contrats/<%= item.id %>/generer-cycle" class="inline-suite-status-form">
                  <input type="hidden" name="_csrf" value="<%= csrfToken %>">
                  <button class="secondary">Générer le cycle</button>
                </form>
              </article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="qualite">
      <summary class="suite-module-title"><div><p class="eyebrow">Qualité terrain</p><h2>Checklists, photos avant/après et signature client.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/qualite" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two"><label>Intervention<select name="intervention_id"><option value="">Non rattachée</option><% context.interventions.forEach((item) => { %><option value="<%= item.id %>"><%= item.service_type || 'Intervention' %> · <%= item.address || '' %></option><% }) %></select></label><label>Employé<select name="user_id"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label></div>
          <label>Checklist<textarea name="checklist" rows="4" placeholder="Point contrôlé&#10;Photo avant&#10;Photo après&#10;Signature client"></textarea></label>
          <div class="form-grid two"><label>Photo avant<input name="before_photo_path" placeholder="/photos/..."></label><label>Photo après<input name="after_photo_path" placeholder="/photos/..."></label></div>
          <div class="form-grid three"><label>Signature client<input name="client_signature"></label><label>Score %<input type="number" step="0.01" name="score" value="100"></label><label>Signature date<input type="datetime-local" name="signed_at"></label></div>
          <button>Enregistrer le contrôle</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Rapports qualité</h3>
          <div class="suite-list">
            <% rows.qualityReports.forEach((item) => { %>
              <article><strong><%= item.client_signature || 'Contrôle terrain' %></strong><span><%= personName(item) %> · score <%= Number(item.score || 0).toFixed(1) %>%</span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="checklists">
      <summary class="suite-module-title"><div><p class="eyebrow">Checklists intervention</p><h2>Modèles paramétrables par service et équipe.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/checklists" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two"><label>Nom<input name="name" required placeholder="Nettoyage fin de bail"></label><label>Service<input name="service_type" placeholder="Fin de bail, vitres, chantier..."></label></div>
          <div class="form-grid two"><label>Appliquer à<select name="applies_to"><option value="intervention">Interventions</option><option value="quote">Devis</option><option value="all">Tous les rapports</option></select></label><label class="check premium-check small"><input type="checkbox" name="is_default" value="1"><span><strong>Modèle par défaut</strong><small>Utilisé si aucun service précis ne correspond.</small></span></label></div>
          <label>Points de contrôle<textarea name="items" rows="7" placeholder="Accès et clés vérifiés&#10;Photos avant/après&#10;Surfaces contrôlées&#10;Signature client demandée"></textarea></label>
          <button>Enregistrer la checklist</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Modèles actifs</h3>
          <div class="suite-list">
            <% rows.checklistTemplates.forEach((item) => { %>
              <article><strong><%= item.name %></strong><span><%= item.service_type || 'Tous services' %> · <%= item.is_default ? 'par défaut' : 'spécifique' %></span><em><%= item.applies_to %></em></article>
            <% }) %>
            <% if (!rows.checklistTemplates.length) { %><p class="empty-state"><strong>Aucune checklist</strong><span>Créez un modèle pour guider les rapports terrain.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="ged">
      <summary class="suite-module-title"><div><p class="eyebrow">GED</p><h2>Documents classés, droits de visibilité et fiduciaire.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/documents" class="panel form-grid compact" enctype="multipart/form-data">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Titre<input name="title" required placeholder="Contrat, consigne client, preuve d’intervention..."></label>
          <div class="form-grid two"><label>Client<select name="owner_user_id"><option value="">Non rattaché</option><% context.clients.forEach((client) => { %><option value="<%= client.id %>"><%= clientName(client) %></option><% }) %></select></label><label>Intervention<select name="intervention_id"><option value="">Non rattachée</option><% context.interventions.forEach((item) => { %><option value="<%= item.id %>"><%= item.service_type || 'Intervention' %> · <%= item.address || '' %></option><% }) %></select></label></div>
          <div class="form-grid three"><label>Type<select name="document_type"><option value="client">Client</option><option value="intervention">Intervention</option><option value="contract">Contrat</option><option value="key">Clés</option><option value="complaint">Réclamation</option><option value="fiduciary">Fiduciaire</option><option value="hr">RH</option><option value="supplier">Fournisseur</option><option value="other">Autre</option></select></label><label>Visibilité<select name="visibility"><option value="admin">Administration</option><option value="team">Équipe terrain</option><option value="client">Client</option><option value="fiduciary">Fiduciaire</option></select></label><label>Fichier<input type="file" name="document_file" accept="application/pdf,image/jpeg,image/png,image/webp"></label></div>
          <div class="form-grid two"><label>Tags<input name="tags" placeholder="contrat, clé, qualité"></label><label>Chemin externe<input name="file_path" placeholder="Optionnel si fichier déjà stocké"></label></div>
          <label>Notes<textarea name="notes" rows="3"></textarea></label>
          <button>Ajouter à la GED</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Documents récents</h3>
          <div class="suite-list">
            <% rows.documents.forEach((item) => { %>
              <article>
                <strong><%= item.title %></strong>
                <span><%= clientName(item) %> · <%= ui.label(item.document_type) %> · visibilité <%= ui.label(item.visibility) %></span>
                <em><%= ui.date(item.created_at, true) %></em>
                <% if (item.file_path) { %><a class="button secondary small" href="<%= adminBase %>/suite/documents/<%= item.id %>/telecharger">Ouvrir</a><% } %>
              </article>
            <% }) %>
            <% if (!rows.documents.length) { %><p class="empty-state"><strong>GED vide</strong><span>Classez les contrats, consignes, justificatifs et pièces fiduciaires.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="cles">
      <summary class="suite-module-title"><div><p class="eyebrow">Gestion des clés</p><h2>Registre sécurisé, détenteur et échéance de retour.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/cles" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Libellé<input name="label" required placeholder="Jeu clés immeuble, badge entrée, boîte sécurisée..."></label>
          <div class="form-grid two"><label>Client<select name="client_id"><option value="">Non rattaché</option><% context.clients.forEach((client) => { %><option value="<%= client.id %>"><%= clientName(client) %></option><% }) %></select></label><label>Intervention<select name="intervention_id"><option value="">Non rattachée</option><% context.interventions.forEach((item) => { %><option value="<%= item.id %>"><%= item.service_type || 'Intervention' %></option><% }) %></select></label></div>
          <div class="form-grid three"><label>Code interne<input name="key_code"></label><label>Lieu coffre/dépôt<input name="location"></label><label>Statut<select name="status"><option value="available">Disponible</option><option value="assigned">Attribuée</option><option value="missing">Manquante</option><option value="returned">Retournée</option><option value="archived">Archivée</option></select></label></div>
          <div class="form-grid two"><label>Détenteur<select name="holder_user_id"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label><label>Retour prévu<input type="date" name="return_due_at"></label></div>
          <label>Notes<textarea name="notes" rows="3"></textarea></label>
          <button>Enregistrer la clé</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Registre des clés</h3>
          <div class="suite-list">
            <% rows.keys.forEach((item) => { %>
              <article><strong><%= item.label %></strong><span><%= clientName(item) %> · détenteur <%= holderName(item) %> · retour <%= item.return_due_at || 'non fixé' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
            <% if (!rows.keys.length) { %><p class="empty-state"><strong>Aucune clé</strong><span>Ajoutez les clés et badges sensibles avant les interventions.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="reclamations">
      <summary class="suite-module-title"><div><p class="eyebrow">Réclamations 360</p><h2>SLA, cause racine, résolution et satisfaction.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/reclamations" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Sujet<input name="subject" required placeholder="Client insatisfait, oubli de zone, dommage, retard..."></label>
          <div class="form-grid two"><label>Client<select name="client_id"><option value="">Non rattaché</option><% context.clients.forEach((client) => { %><option value="<%= client.id %>"><%= clientName(client) %></option><% }) %></select></label><label>Intervention<select name="intervention_id"><option value="">Non rattachée</option><% context.interventions.forEach((item) => { %><option value="<%= item.id %>"><%= item.service_type || 'Intervention' %> · <%= item.address || '' %></option><% }) %></select></label></div>
          <div class="form-grid three"><label>Catégorie<input name="category" placeholder="Qualité, délai, dommage..."></label><label>Sévérité<select name="severity"><option value="normal">Normale</option><option value="high">Haute</option><option value="critical">Critique</option><option value="low">Basse</option></select></label><label>SLA<input type="datetime-local" name="sla_due_at"></label></div>
          <div class="form-grid two"><label>Responsable<select name="assigned_to"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label><label>Statut<select name="status"><option value="new">Nouvelle</option><option value="triage">Analyse</option><option value="in_progress">En cours</option><option value="waiting_client">Attente client</option><option value="resolved">Résolue</option></select></label></div>
          <label>Cause racine<textarea name="root_cause" rows="3"></textarea></label>
          <label>Plan de résolution<textarea name="resolution" rows="3"></textarea></label>
          <button>Créer la réclamation</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Dossiers ouverts</h3>
          <div class="suite-list">
            <% rows.complaints.forEach((item) => { %>
              <article>
                <strong><%= item.subject %></strong>
                <span><%= clientName(item) %> · responsable <%= assignedName(item) %> · SLA <%= ui.date(item.sla_due_at, true) %></span>
                <em><%= ui.label(item.severity) %> · <%= ui.label(item.status) %></em>
                <form method="post" action="<%= adminBase %>/suite/reclamations/<%= item.id %>/statut" class="inline-suite-status-form">
                  <input type="hidden" name="_csrf" value="<%= csrfToken %>">
                  <select name="status"><% ['triage','in_progress','waiting_client','resolved','closed'].forEach((status) => { %><option value="<%= status %>" <%= item.status === status ? 'selected' : '' %>><%= ui.label(status) %></option><% }) %></select>
                  <input type="hidden" name="severity" value="<%= item.severity %>">
                  <button class="secondary">Mettre à jour</button>
                </form>
              </article>
            <% }) %>
            <% if (!rows.complaints.length) { %><p class="empty-state"><strong>Aucune réclamation</strong><span>Les dossiers clients critiques seront suivis ici avec SLA.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="planning">
      <summary class="suite-module-title"><div><p class="eyebrow">Planning avancé</p><h2>Tournées, zones, temps de trajet et optimisation.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/planning" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid three"><label>Date<input type="date" name="route_date"></label><label>Zone<input name="zone"></label><label>Trajet minutes<input type="number" name="total_travel_minutes"></label></div>
          <label>Responsable<select name="assigned_user_id"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label>
          <label>Arrêts optimisés<textarea name="stops" rows="4" placeholder="Client A | 08:00 | 35 min&#10;Client B | 10:15 | 28 min"></textarea></label>
          <button>Enregistrer la tournée</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Tournées planifiées</h3>
          <div class="suite-list">
            <% rows.routes.forEach((item) => { %>
              <article><strong><%= item.zone || 'Zone' %> · <%= item.route_date || 'Date à fixer' %></strong><span><%= personName(item) %> · <%= ui.duration(item.total_travel_minutes) %> · <%= stopsLabel(item.stops_json) || 'Arrêts à compléter' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="rh">
      <summary class="suite-module-title"><div><p class="eyebrow">RH complète</p><h2>Contrats, onboarding, documents et formations.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/rh" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Employé<select name="user_id"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label>
          <div class="form-grid two"><label>Type<select name="doc_type"><option value="contract">Contrat</option><option value="onboarding">Onboarding</option><option value="training">Formation</option><option value="policy">Politique interne</option></select></label><label>Statut<select name="status"><option value="draft">Brouillon</option><option value="sent">Envoyé</option><option value="signed">Signé</option><option value="completed">Terminé</option></select></label></div>
          <label>Titre<input name="title" required></label>
          <div class="form-grid two"><label>Échéance<input type="date" name="due_on"></label><label>Fichier<input name="file_path" placeholder="/uploads/..."></label></div>
          <label class="checkbox-row"><input type="checkbox" name="signature_required" value="1"> Signature requise</label>
          <label>Notes<textarea name="notes" rows="3"></textarea></label>
          <button>Ajouter le document RH</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Dossiers RH</h3>
          <div class="suite-list">
            <% rows.hrDocuments.forEach((item) => { %>
              <article><strong><%= item.title %></strong><span><%= personName(item) %> · <%= ui.label(item.doc_type) %> · échéance <%= item.due_on || 'non fixée' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="support">
      <summary class="suite-module-title"><div><p class="eyebrow">Support client</p><h2>Tickets, SLA et base de connaissances.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/support/tickets" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Demandeur<select name="requester_user_id"><option value="">Interne ou prospect</option><% context.clients.forEach((client) => { %><option value="<%= client.id %>"><%= clientName(client) %></option><% }) %></select></label>
          <div class="form-grid two"><label>Priorité<select name="priority"><option value="normal">Normale</option><option value="high">Haute</option><option value="critical">Critique</option><option value="low">Basse</option></select></label><label>SLA<input type="datetime-local" name="sla_due_at"></label></div>
          <label>Sujet<input name="subject" required></label>
          <label>Catégorie<input name="category"></label>
          <button>Créer le ticket</button>
        </form>
        <article class="panel suite-list-panel">
          <div class="compact-heading"><h3>Tickets</h3><form method="post" action="<%= adminBase %>/suite/support/articles" class="inline-suite-form"><input type="hidden" name="_csrf" value="<%= csrfToken %>"><input name="title" placeholder="Nouvel article"><input name="category" placeholder="Catégorie"><button>Ajouter article</button></form></div>
          <div class="suite-list">
            <% rows.tickets.forEach((item) => { %>
              <article><strong><%= item.subject %></strong><span><%= clientName(item) %> · SLA <%= ui.date(item.sla_due_at, true) %></span><em><%= ui.label(item.priority) %></em></article>
            <% }) %>
            <% rows.articles.slice(0, 4).forEach((item) => { %>
              <article><strong><%= item.title %></strong><span>Base de connaissances · <%= item.category || 'Général' %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="marketing">
      <summary class="suite-module-title"><div><p class="eyebrow">Marketing</p><h2>Email, SMS, avis et parrainage.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/marketing" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two"><label>Canal<select name="campaign_type"><option value="email">Email</option><option value="sms">SMS</option><option value="review">Demande d’avis</option><option value="referral">Parrainage</option></select></label><label>Statut<select name="status"><option value="draft">Brouillon</option><option value="scheduled">Planifiée</option><option value="running">En cours</option><option value="sent">Envoyée</option></select></label></div>
          <label>Nom<input name="name" required></label>
          <div class="form-grid two"><label>Segment<input name="segment" placeholder="Clients terminés 30 jours"></label><label>Planification<input type="datetime-local" name="scheduled_at"></label></div>
          <label>Message<textarea name="message" rows="4"></textarea></label>
          <button>Créer la campagne</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Campagnes</h3>
          <div class="suite-list">
            <% rows.campaigns.forEach((item) => { %>
              <article><strong><%= item.name %></strong><span><%= ui.label(item.campaign_type) %> · <%= item.segment || 'Segment non défini' %> · <%= item.conversion_count %> conversion(s)</span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
            <% rows.reviewRequests.forEach((item) => { %>
              <article><strong>Demande avis · <%= item.invoice_number || 'Facture' %></strong><span><%= personName(item) %> · envoyée le <%= ui.date(item.sent_at || item.requested_at, true) %></span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="modeles">
      <summary class="suite-module-title"><div><p class="eyebrow">Modèles de messages</p><h2>Email, SMS et WhatsApp configurables.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/modeles" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid three"><label>Canal<select name="channel"><option value="email">Email</option><option value="sms">SMS</option><option value="whatsapp">WhatsApp</option></select></label><label>Statut<select name="status"><option value="active">Actif</option><option value="draft">Brouillon</option><option value="archived">Archivé</option></select></label><label>Nom<input name="name" required placeholder="Relance facture, avis Google..."></label></div>
          <label>Sujet email<input name="subject" placeholder="Utilisé pour les emails"></label>
          <label>Message<textarea name="body" rows="6" placeholder="Bonjour {{client}}, votre facture {{invoice_number}} est disponible..."></textarea></label>
          <label>Variables disponibles<input name="variables" value="{{client}}, {{company}}, {{invoice_number}}, {{google_review_url}}, {{quote_number}}"></label>
          <button>Enregistrer le modèle</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Bibliothèque</h3>
          <div class="suite-list editable-template-list">
            <% rows.templates.forEach((item) => { %>
              <details class="template-edit-card">
                <summary>
                  <span><strong><%= item.name %></strong><small><%= ui.label(item.channel) %> · <%= item.subject || 'Sans sujet' %></small></span>
                  <em><%= ui.label(item.status) %></em>
                </summary>
                <form method="post" action="<%= adminBase %>/suite/modeles/<%= item.id %>" class="form-grid compact">
                  <input type="hidden" name="_csrf" value="<%= csrfToken %>">
                  <div class="form-grid three">
                    <label>Canal<select name="channel"><option value="email" <%= item.channel==='email'?'selected':'' %>>Email</option><option value="sms" <%= item.channel==='sms'?'selected':'' %>>SMS</option><option value="whatsapp" <%= item.channel==='whatsapp'?'selected':'' %>>WhatsApp</option></select></label>
                    <label>Statut<select name="status"><option value="active" <%= item.status==='active'?'selected':'' %>>Actif</option><option value="draft" <%= item.status==='draft'?'selected':'' %>>Brouillon</option><option value="archived" <%= item.status==='archived'?'selected':'' %>>Archivé</option></select></label>
                    <label>Nom<input name="name" value="<%= item.name %>" required></label>
                  </div>
                  <label>Sujet email<input name="subject" value="<%= item.subject || '' %>"></label>
                  <label>Message<textarea name="body" rows="6"><%= item.body || '' %></textarea></label>
                  <label>Variables disponibles<input name="variables" value="<%= item.variables || '{{client}}, {{company}}, {{invoice_number}}, {{google_review_url}}, {{quote_number}}' %>"></label>
                  <div class="actions inline-actions">
                    <button>Enregistrer</button>
                  </div>
                </form>
                <form method="post" action="<%= adminBase %>/suite/modeles/<%= item.id %>/supprimer" data-confirm="Supprimer ce modèle ?">
                  <input type="hidden" name="_csrf" value="<%= csrfToken %>">
                  <button class="secondary small">Supprimer</button>
                </form>
              </details>
            <% }) %>
            <% if (!rows.templates.length) { %><p class="empty-state"><strong>Aucun modèle</strong><span>Créez des messages cohérents pour les relances, avis, devis et interventions.</span></p><% } %>
          </div>
        </article>
      </div>
    </details>

    <% if (false) { %>
    <details class="suite-module-section suite-module-drawer" id="ocr">
      <summary class="suite-module-title"><div><p class="eyebrow">OCR documents</p><h2>Factures fournisseurs et classement automatique.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/ocr" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two"><label>Fournisseur<input name="supplier_name"></label><label>N° facture<input name="invoice_number"></label></div>
          <div class="form-grid three"><label>Total<input type="number" step="0.01" name="total_amount"></label><label>TVA<input type="number" step="0.01" name="vat_amount"></label><label>Confiance %<input type="number" step="0.01" name="confidence"></label></div>
          <div class="form-grid two"><label>Classement<input name="classification" placeholder="Achats, véhicule, matériel..."></label><label>Fichier<input name="file_path" placeholder="/uploads/..."></label></div>
          <label>Texte reconnu<textarea name="raw_text" rows="4"></textarea></label>
          <button>Enregistrer l’analyse OCR</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Documents reconnus</h3>
          <div class="suite-list">
            <% rows.ocrDocuments.forEach((item) => { %>
              <article><strong><%= item.supplier_name || 'Document fournisseur' %></strong><span><%= item.invoice_number || 'Sans numéro' %> · <%= ui.money(item.total_amount) %> · confiance <%= Number(item.confidence || 0).toFixed(1) %>%</span><em><%= ui.label(item.status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="mobile">
      <summary class="suite-module-title"><div><p class="eyebrow">Mobile offline</p><h2>File de synchronisation pour employés terrain.</h2></div><span class="suite-module-toggle">Ouvrir</span></summary>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/mobile" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <label>Employé<select name="user_id"><option value="">Non assigné</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label>
          <div class="form-grid two"><label>Appareil<input name="device_id" placeholder="iPhone équipe 1"></label><label>Événement<input name="event_type" value="field_sync"></label></div>
          <label>Payload JSON<textarea name="payload_json" rows="4" placeholder='{"photos":2,"signature":true}'></textarea></label>
          <button>Ajouter à la file offline</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Synchronisations</h3>
          <div class="suite-list">
            <% rows.offlineEvents.forEach((item) => { %>
              <article><strong><%= item.event_type %></strong><span><%= personName(item) %> · <%= item.device_id || 'Appareil non identifié' %> · <%= ui.date(item.created_at, true) %></span><em><%= ui.label(item.sync_status) %></em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>

    <details class="suite-module-section suite-module-drawer" id="bi">
      <summary class="suite-module-title">
        <div><p class="eyebrow">BI & rentabilité</p><h2>Marge par client, service, employé et zone.</h2></div>
        <span class="suite-module-toggle">Ouvrir</span>
      </summary>
      <div class="suite-module-actions"><a class="button secondary" href="<%= adminBase %>/suite/bi.csv">Télécharger CSV</a></div>
      <div class="suite-two-column">
        <form method="post" action="<%= adminBase %>/suite/bi" class="panel form-grid compact">
          <input type="hidden" name="_csrf" value="<%= csrfToken %>">
          <div class="form-grid two"><label>Mois<input type="month" name="period_month"></label><label>Service<input name="service_type"></label></div>
          <div class="form-grid two"><label>Client<select name="client_id"><option value="">Tous</option><% context.clients.forEach((client) => { %><option value="<%= client.id %>"><%= clientName(client) %></option><% }) %></select></label><label>Employé<select name="user_id"><option value="">Tous</option><% context.employees.forEach((employee) => { %><option value="<%= employee.id %>"><%= personName(employee) %></option><% }) %></select></label></div>
          <div class="form-grid three"><label>Zone<input name="zone"></label><label>Revenu<input type="number" step="0.01" name="revenue"></label><label>Coûts<input type="number" step="0.01" name="costs"></label></div>
          <button>Ajouter snapshot</button>
        </form>
        <article class="panel suite-list-panel">
          <h3>Rentabilité</h3>
          <div class="suite-list">
            <% rows.profitability.forEach((item) => { %>
              <article><strong><%= item.period_month %> · <%= item.service_type || 'Service' %></strong><span><%= item.zone || 'Zone non définie' %> · revenu <%= ui.money(item.revenue) %> · coûts <%= ui.money(item.costs) %></span><em><%= Number(item.margin_rate || 0).toFixed(1) %>%</em></article>
            <% }) %>
          </div>
        </article>
      </div>
    </details>
    <% } %>
    </div>
    <script>
      (() => {
        const openModuleFromHash = () => {
          const id = decodeURIComponent(window.location.hash || '').replace('#', '');
          if (!id) return;
          const panel = document.getElementById(id);
          if (panel && panel.tagName === 'DETAILS') panel.open = true;
        };
        document.querySelectorAll('.suite-module-nav a[href^="#"]').forEach((link) => {
          link.addEventListener('click', () => {
            const panel = document.querySelector(link.getAttribute('href'));
            if (panel && panel.tagName === 'DETAILS') panel.open = true;
          });
        });
        window.addEventListener('hashchange', openModuleFromHash);
        openModuleFromHash();
      })();
    </script>
  </section>
</div>
