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

/**
 * Invitation Model
 * Repräsentiert die invitation-Tabelle (falls vorhanden)
 * Wenn nicht vorhanden, erstellen wir eine einfache In-Memory-Lösung
 */
class Invitation extends Model {
  static initialize(sequelize) {
    Invitation.init(
      {
        id: {
          type: DataTypes.BIGINT,
          primaryKey: true,
          autoIncrement: true,
          allowNull: false
        },
        inviter_user_id: {
          type: DataTypes.BIGINT,
          allowNull: false,
          references: {
            model: 'user',
            key: 'id'
          }
        },
        email: {
          type: DataTypes.STRING(255),
          allowNull: false
        },
        token: {
          type: DataTypes.STRING(255),
          allowNull: false,
          unique: true
        },
        created_at: {
          type: DataTypes.DATE,
          allowNull: false,
          defaultValue: DataTypes.NOW
        },
        expires_at: {
          type: DataTypes.DATE,
          allowNull: false
        },
        status: {
          type: DataTypes.STRING(20),
          allowNull: false,
          defaultValue: 'pending' // pending, accepted, expired
        }
      },
      {
        sequelize,
        tableName: 'invitation',
        timestamps: false,
        indexes: [
          {
            name: 'idx_invitation_token',
            fields: ['token'],
            unique: true
          },
          {
            name: 'idx_invitation_email_created',
            fields: ['email', 'created_at']
          }
        ]
      }
    );

    return Invitation;
  }

  /**
   * Definiert Assoziationen mit anderen Models
   */
  static associate(models) {
    Invitation.belongsTo(models.User, {
      foreignKey: 'inviter_user_id',
      as: 'inviter'
    });
  }
}

module.exports = Invitation;

