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

/**
 * Watcher Model
 * Repräsentiert Personen, die die Arbeitszeiten eines Users sehen dürfen
 */
class Watcher extends Model {
  static initialize(sequelize) {
    Watcher.init(
      {
        id: {
          type: DataTypes.BIGINT,
          primaryKey: true,
          autoIncrement: true,
          allowNull: false
        },
        user_id: {
          type: DataTypes.BIGINT,
          allowNull: false,
          references: {
            model: 'user',
            key: 'id'
          },
          comment: 'Der User dessen Arbeitszeiten gesehen werden dürfen'
        },
        watcher_email: {
          type: DataTypes.STRING(255),
          allowNull: false,
          comment: 'Email-Adresse der Person, die sehen darf'
        },
        created_at: {
          type: DataTypes.DATE,
          allowNull: false,
          defaultValue: DataTypes.NOW
        },
        is_active: {
          type: DataTypes.BOOLEAN,
          allowNull: false,
          defaultValue: true
        }
      },
      {
        sequelize,
        tableName: 'watcher',
        timestamps: false,
        indexes: [
          {
            name: 'idx_watcher_user',
            fields: ['user_id']
          },
          {
            name: 'idx_watcher_email',
            fields: ['watcher_email']
          },
          {
            name: 'idx_watcher_user_email',
            fields: ['user_id', 'watcher_email'],
            unique: true
          }
        ]
      }
    );

    return Watcher;
  }

  /**
   * Definiert Assoziationen mit anderen Models
   */
  static associate(models) {
    Watcher.belongsTo(models.User, {
      foreignKey: 'user_id',
      as: 'user'
    });
  }
}

module.exports = Watcher;

