import { DataTypes } from 'sequelize';
import { sequelize } from '../../utils/sequelize.js';

const TaxiHighscore = sequelize.define('TaxiHighscore', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    userId: {
      type: DataTypes.INTEGER,
      allowNull: true // Kann null sein, falls User gelöscht wird
    },
    nickname: {
      type: DataTypes.STRING(100),
      allowNull: true, // Kann null sein, falls User gelöscht wird
      comment: 'Nickname zum Zeitpunkt des Spiels - bleibt erhalten wenn User gelöscht wird'
    },
    passengersDelivered: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 0,
      comment: 'Anzahl der abgelieferten Passagiere'
    },
    playtime: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 0,
      comment: 'Spielzeit in Sekunden'
    },
    points: {
      type: DataTypes.INTEGER,
      allowNull: false,
      defaultValue: 0,
      comment: 'Erreichte Punkte'
    },
    mapId: {
      type: DataTypes.INTEGER,
      allowNull: true,
      comment: 'ID der gespielten Map'
    },
    mapName: {
      type: DataTypes.STRING(100),
      allowNull: true,
      comment: 'Name der Map zum Zeitpunkt des Spiels'
    },
    createdAt: {
      type: DataTypes.DATE,
      allowNull: false,
      defaultValue: DataTypes.NOW
    },
    updatedAt: {
      type: DataTypes.DATE,
      allowNull: false,
      defaultValue: DataTypes.NOW
    }
  }, {
    tableName: 'taxi_highscores',
    schema: 'taxi',
    timestamps: true,
    underscored: true,
    indexes: [
      {
        fields: ['user_id']
      },
      {
        fields: ['points']
      },
      {
        fields: ['passengers_delivered']
      },
      {
        fields: ['map_id']
      },
      {
        fields: ['created_at']
      },
      {
        unique: true,
        fields: ['user_id', 'map_id'],
        name: 'unique_user_map_highscore'
      }
    ]
  });

export default TaxiHighscore;
