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

/**
 * AuthIdentity Model
 * Repräsentiert die auth_identity-Tabelle für OAuth/SSO-Provider
 */
class AuthIdentity extends Model {
  static initialize(sequelize) {
    AuthIdentity.init(
      {
        id: {
          type: DataTypes.BIGINT,
          primaryKey: true,
          autoIncrement: true,
          allowNull: false
        },
        version: {
          type: DataTypes.INTEGER,
          allowNull: false,
          defaultValue: 0
        },
        auth_info_id: {
          type: DataTypes.BIGINT,
          allowNull: true,
          references: {
            model: 'auth_info',
            key: 'id'
          }
        },
        provider: {
          type: DataTypes.STRING(64),
          allowNull: false,
          comment: 'OAuth Provider: google, github, microsoft, etc.'
        },
        identity: {
          type: DataTypes.STRING(512),
          allowNull: false,
          comment: 'Provider User ID oder E-Mail'
        }
      },
      {
        sequelize,
        tableName: 'auth_identity',
        timestamps: false,
        indexes: [
          {
            name: 'fk_auth_identity_auth_info',
            fields: ['auth_info_id']
          },
          {
            name: 'auth_identity_provider_identity',
            unique: true,
            fields: ['provider', 'identity']
          }
        ]
      }
    );

    return AuthIdentity;
  }

  /**
   * Gibt den Provider-Namen zurück
   */
  getProvider() {
    return this.provider;
  }

  /**
   * Prüft ob dies ein Google-Login ist
   */
  isGoogle() {
    return this.provider === 'google';
  }

  /**
   * Prüft ob dies ein GitHub-Login ist
   */
  isGitHub() {
    return this.provider === 'github';
  }
}

module.exports = AuthIdentity;



