/* eslint-disable */
module.exports = {
  async up(queryInterface, Sequelize) {
    // Typ-Tabelle (konfigurierbar ohne Code): falukant_type.reputation_action
    await queryInterface.sequelize.query(`
      CREATE TABLE IF NOT EXISTS falukant_type.reputation_action (
        id serial PRIMARY KEY,
        tr text NOT NULL UNIQUE,
        cost integer NOT NULL CHECK (cost >= 0),
        base_gain integer NOT NULL CHECK (base_gain >= 0),
        decay_factor double precision NOT NULL CHECK (decay_factor > 0 AND decay_factor <= 1),
        min_gain integer NOT NULL DEFAULT 0 CHECK (min_gain >= 0),
        decay_window_days integer NOT NULL DEFAULT 7 CHECK (decay_window_days >= 1 AND decay_window_days <= 365)
      );
    `);

    // Log-Tabelle: falukant_log.reputation_action
    await queryInterface.sequelize.query(`
      CREATE TABLE IF NOT EXISTS falukant_log.reputation_action (
        id serial PRIMARY KEY,
        falukant_user_id integer NOT NULL,
        action_type_id integer NOT NULL,
        cost integer NOT NULL CHECK (cost >= 0),
        base_gain integer NOT NULL CHECK (base_gain >= 0),
        gain integer NOT NULL CHECK (gain >= 0),
        times_used_before integer NOT NULL CHECK (times_used_before >= 0),
        action_timestamp timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
      );
    `);

    await queryInterface.sequelize.query(`
      CREATE INDEX IF NOT EXISTS reputation_action_log_user_type_idx
      ON falukant_log.reputation_action (falukant_user_id, action_type_id);
    `);
    await queryInterface.sequelize.query(`
      CREATE INDEX IF NOT EXISTS reputation_action_log_ts_idx
      ON falukant_log.reputation_action (action_timestamp);
    `);
  },

  async down(queryInterface, Sequelize) {
    await queryInterface.sequelize.query(`DROP TABLE IF EXISTS falukant_log.reputation_action;`);
    await queryInterface.sequelize.query(`DROP TABLE IF EXISTS falukant_type.reputation_action;`);
  },
};


