import type { Review } from '@/types';

/**
 * TL-318 — détail d'un questionnaire de séjour (clic sur la note dans
 * `/questionnaires`). Contrat de `QuestionnaireBreakdownBuilder` (PHP).
 */

export type QuestionnaireQuestionType = 'single_choice' | 'text';

export type QuestionnaireAnswerStatus = 'answered' | 'missing' | 'not_applicable';

export interface QuestionnaireLayoutQuestion {
    id: number;
    type: QuestionnaireQuestionType;
    /** Libellé traduit dans la langue de l'interface. */
    question: string;
    /** Question factuelle : affichée sans couleur, mais comptée dans la note. */
    informational: boolean;
}

/** Une section du détail, dans l'ordre d'affichage. Envoyé une fois par page. */
export interface QuestionnaireLayoutSection {
    key: string;
    label: string;
    /** La section affiche l'équipe de ménage planifiée sur le séjour. */
    housekeepers: boolean;
    questions: QuestionnaireLayoutQuestion[];
}

export interface QuestionnaireAnswer {
    status: QuestionnaireAnswerStatus;
    /** Option choisie, traduite. Absente pour une question texte. */
    answer?: string;
    /** Réponse libre d'une question texte. */
    text?: string;
    /** Présents seulement quand la réponse entre dans la note. */
    points?: number;
    max?: number;
}

export interface QuestionnaireBreakdown {
    /** `reservations.id` (local). */
    reservation_id: number;
    /** `Y-m-d`. */
    check_in: string | null;
    check_out: string | null;
    /** Total exact qui produit la note sur 5 : points ÷ max × 5. */
    points: number;
    max: number;
    housekeepers: string[];
    /** Indexé par id de question. */
    answers: Record<string, QuestionnaireAnswer>;
}

/** Ligne de l'onglet Questionnaire : un avis unifié, avec son détail. */
export interface QuestionnaireRow extends Review {
    breakdown?: QuestionnaireBreakdown;
}
