const { DataTypes } = require('sequelize');

module.exports = (sequelize) => {
    const Ticket = sequelize.define('Ticket', {
        id: {
            type: DataTypes.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        numero_ticket: {
            type: DataTypes.STRING(50),
            allowNull: false,
            unique: true,
            comment: 'Numéro unique du ticket'
        },
        commande_id: {
            type: DataTypes.INTEGER,
            allowNull: false,
            references: {
                model: 'commandes',
                key: 'id'
            },
            comment: 'ID de la commande associée'
        },
        table_id: {
            type: DataTypes.INTEGER,
            allowNull: true,
            references: {
                model: 'tables',
                key: 'id'
            },
            comment: 'ID de la table (optionnel)'
        },
        // Informations du serveur directement dans le ticket
        serveur_nom: {
            type: DataTypes.STRING(100),
            allowNull: true,
            comment: 'Nom du serveur'
        },
        serveur_prenom: {
            type: DataTypes.STRING(100),
            allowNull: true,
            comment: 'Prénom du serveur'
        },
        // Données client directement dans le ticket (optionnel)
        client_nom: {
            type: DataTypes.STRING(100),
            allowNull: true,
            comment: 'Nom du client (optionnel)'
        },
        client_prenom: {
            type: DataTypes.STRING(100),
            allowNull: true,
            comment: 'Prénom du client (optionnel)'
        },
        client_telephone: {
            type: DataTypes.STRING(20),
            allowNull: true,
            comment: 'Téléphone du client (optionnel)'
        },
        client_email: {
            type: DataTypes.STRING(100),
            allowNull: true,
            comment: 'Email du client (optionnel)'
        },
        client_adresse: {
            type: DataTypes.TEXT,
            allowNull: true,
            comment: 'Adresse du client (optionnel)'
        },
        montant_ht: {
            type: DataTypes.DECIMAL(10, 2),
            allowNull: false,
            defaultValue: 0.00,
            comment: 'Montant hors taxes'
        },
        montant_tva: {
            type: DataTypes.DECIMAL(10, 2),
            allowNull: false,
            defaultValue: 0.00,
            comment: 'Montant de la TVA'
        },
        montant_ttc: {
            type: DataTypes.DECIMAL(10, 2),
            allowNull: false,
            defaultValue: 0.00,
            comment: 'Montant toutes taxes comprises'
        },
        remise: {
            type: DataTypes.DECIMAL(10, 2),
            allowNull: false,
            defaultValue: 0.00,
            comment: 'Montant de la remise appliquée'
        },
        taux_tva: {
            type: DataTypes.DECIMAL(5, 2),
            allowNull: false,
            defaultValue: 20.00,
            comment: 'Taux de TVA en pourcentage'
        },
        mode_paiement: {
            type: DataTypes.ENUM('especes', 'carte', 'cheque', 'virement', 'mobile', 'autre'),
            allowNull: false,
            defaultValue: 'especes',
            comment: 'Mode de paiement'
        },
        statut: {
            type: DataTypes.ENUM('brouillon', 'emis', 'paye', 'rembourse', 'annule'),
            allowNull: false,
            defaultValue: 'brouillon',
            comment: 'Statut du ticket'
        },
        type_service: {
            type: DataTypes.ENUM('sur_place', 'emporter', 'livraison'),
            allowNull: false,
            defaultValue: 'sur_place',
            comment: 'Type de service'
        },
        date_emission: {
            type: DataTypes.DATE,
            allowNull: false,
            defaultValue: DataTypes.NOW,
            comment: 'Date d\'émission du ticket'
        },
        date_paiement: {
            type: DataTypes.DATE,
            allowNull: true,
            comment: 'Date de paiement'
        },
        notes: {
            type: DataTypes.TEXT,
            allowNull: true,
            comment: 'Notes sur le ticket'
        },
        facture_pdf: {
            type: DataTypes.STRING(500),
            allowNull: true,
            comment: 'Chemin vers le PDF généré'
        },
        donnees_supplementaires: {
            type: DataTypes.JSON,
            allowNull: true,
            comment: 'Données supplémentaires en JSON'
        }
    }, {
        tableName: 'tickets',
        timestamps: true,
        createdAt: 'created_at',
        updatedAt: 'updated_at',
        indexes: [
            { fields: ['numero_ticket'], unique: true },
            { fields: ['commande_id'] },
            { fields: ['table_id'] },
            { fields: ['statut'] },
            { fields: ['date_emission'] },
            { fields: ['client_email'] },
            { fields: ['client_telephone'] },
            { fields: ['serveur_nom'] }
        ]
    });

    return Ticket;
};
