/**
 * OffreAbonnement.js
 *
 * @description :: Modèle pour définir les offres d'abonnement disponibles
 * @docs        :: https://sailsjs.com/docs/concepts/models-and-orm/models
 */

const crypto = require('crypto');
const shortId = (prefix) => `${prefix}${crypto.randomBytes(4).toString('hex').toUpperCase()}`;

module.exports = {
    tableName: 'offre_abonnement',

    attributes: {
        codeOffre: {
            type: 'string',
            columnName: 'code_offre',
            unique: true
        },

        nom: {
            type: 'string',
            columnName: 'nom',
            required: true
        },

        description: {
            type: 'string',
            columnName: 'description',
            allowNull: true
        },

        typeAbonnement: {
            type: 'string',
            columnName: 'type_abonnement',
            required: true,
            isIn: ['gratuit', 'mensuel', 'trimestriel', 'semestriel', 'annuel', 'essai']
        },

        dureeJours: {
            type: 'number',
            columnName: 'duree_jours',
            required: true
        },

        montant: {
            type: 'number',
            columnName: 'montant',
            required: true
        },

        devise: {
            type: 'string',
            columnName: 'devise',
            defaultsTo: 'XOF'
        },

        fonctionnalites: {
            type: 'json',
            columnName: 'fonctionnalites',
            defaultsTo: []
        },

        codeEcole: {
            type: 'string',
            columnName: 'code_ecole',
            //required: true // null = valable pour toutes les écoles
        },

        actif: {
            type: 'boolean',
            columnName: 'actif',
            defaultsTo: true
        },

        dateDebutValidite: {
            type: 'ref',
            columnName: 'date_debut_validite',
            // allowNull: true
        },

        dateFinValidite: {
            type: 'ref',
            columnName: 'date_fin_validite',
            //allowNull: true
        },

        ordreAffichage: {
            type: 'number',
            columnName: 'ordre_affichage',
            defaultsTo: 0
        },

        couleur: {
            type: 'string',
            columnName: 'couleur',
            allowNull: true
        },

        icone: {
            type: 'string',
            columnName: 'icone',
            allowNull: true
        },

        // Relations
        abonnements: {
            collection: 'abonnement',
            via: 'offre'
        }
    },

    beforeCreate: function (values, cb) {
        // Générer un code court et lisible
        if (!values.codeOffre) {
            values.codeOffre = shortId('OFFRE_');
        }
        cb();
    }
}; 