import type { AppTour } from '../types';

/**
 * Visite de l'assistant de création / modification d'un logement.
 *
 * UNE visite pour les DEUX écrans : ils partagent le même parcours en étapes,
 * et les ancres sont posées sur les ENTRÉES du rail — présentes en entier
 * quelle que soit l'étape ouverte. C'est ce qui permet de décrire les sept
 * étapes (huit au siège, en modification) alors qu'une seule est montée à la fois.
 *
 * Les ancres sont sur les `<li>`, jamais sur le `<ol>` : ce dernier est étiré
 * par son parent flex sur toute la hauteur de la page, et une cible plus haute
 * que l'écran fait défiler la visite jusqu'au pied de page — elle s'ouvrait
 * ainsi tout en bas, sur la carte.
 *
 * Trois différences entre les écrans et les comptes, absorbées par `optional` :
 *  - « Instructions d'entrée » n'existe qu'en modification (7ᵉ étape) ;
 *  - « Règles de paiement » n'existe qu'en modification ET pour le compte du
 *    siège (8ᵉ étape, prop `paymentRule` null ailleurs) — pas `adminOnly`, qui
 *    suit le rôle admin et non la nature du compte : c'est l'absence de l'ancre
 *    qui retire l'étape chez une franchise ;
 *  - l'indicateur de brouillon n'existe qu'en création.
 *
 * Faits vérifiés qui portent les textes (`PropertyController`, `PropertyService`,
 * `PropertyValidator`, `steps/*.tsx`) :
 *  - en création, RIEN ne part vers le gestionnaire de canaux avant le bouton
 *    de l'étape 5 ; en modification, CHAQUE bouton « Enregistrer » renvoie le
 *    formulaire ENTIER ;
 *  - le logement est publié actif dès sa création, avant tout prix et toute
 *    disponibilité ;
 *  - arrivé à la dernière étape en création, on ne peut plus revenir en arrière ;
 *  - le brouillon n'est écrit qu'en validant une étape, jamais automatiquement.
 *
 * Ancres : `logements/create.tsx` (rail en propre) et
 * `logements/components/section-sidebar.tsx` via le prop `stepKeys` — jamais en
 * dur, ce composant sert aussi à la modification en lot.
 * Textes dans `lang/{fr,en}/tours.php`, clés `wizard.<key>.title|content`.
 */
export const logementWizardTour: AppTour = {
    id: 'wizard',
    components: ['logements/create', 'logements/edit'],
    steps: [
        {
            // ═══════════════════════════════════════════════════════════════
            // NE JAMAIS VISER LE RAIL ENTIER — IL EST PLUS HAUT QUE L'ÉCRAN
            // ═══════════════════════════════════════════════════════════════
            // Le <ol> du rail est étiré par le flex parent sur toute la hauteur
            // de la page (~2000 px). Or la bibliothèque amène la cible à
            // l'écran avec `scrollIntoView({ block: 'end' })` : elle aligne le
            // BAS de la cible sur le bas de la fenêtre. Sur un élément plus
            // haut que l'écran, cela défile jusqu'au pied de la page — la
            // visite s'ouvrait donc tout en bas, sur la carte.
            //
            // On vise la première entrée : petite, en haut de page. Rien ne
            // défile, le dialogue se pose à côté, et le rail reste entièrement
            // visible juste à côté — l'étape peut le décrire sans le surligner.
            //
            // Cette étape porte donc DEUX choses : le fonctionnement de
            // l'assistant, et le contenu de la première étape. Les fusionner
            // était de toute façon nécessaire : deux étapes de visite ne
            // peuvent pas partager une ancre (un test du registre le vérifie).
            anchor: 'wizard-step-general-information',
            key: 'stepGeneral',
            order: 10,
        },
        // Création seulement.
        { anchor: 'wizard-draft', key: 'draft', order: 20, optional: true },
        { anchor: 'wizard-step-amenities', key: 'stepAmenities', order: 30, optional: true },
        { anchor: 'wizard-step-photos', key: 'stepPhotos', order: 40, optional: true },
        { anchor: 'wizard-step-check-in-out', key: 'stepCheckInOut', order: 50, optional: true },
        { anchor: 'wizard-step-payment-and-deposit', key: 'stepPayment', order: 60, optional: true },
        { anchor: 'wizard-step-price-and-availability', key: 'stepPrice', order: 70, optional: true },
        // Modification seulement.
        { anchor: 'wizard-step-entry-instructions', key: 'stepEntry', order: 80, optional: true },
        // Modification seulement, et siège seulement.
        { anchor: 'wizard-step-payment-rules', key: 'stepPaymentRules', order: 90, optional: true },
    ],
};
