import {
  Sequelize,
  DataTypes,
  Model,
  InferAttributes,
  InferCreationAttributes,
  CreationOptional,
} from "sequelize";
import type { LogicConditionType, LogicAction } from "@/types";

export class LogicRule extends Model<
  InferAttributes<LogicRule>,
  InferCreationAttributes<LogicRule>
> {
  declare id: CreationOptional<string>;
  declare questionId: string;
  declare conditionType: LogicConditionType;
  declare conditionValue: string | null;
  declare action: LogicAction;
  declare targetQuestionId: string | null;
  declare createdAt: CreationOptional<Date>;
  declare updatedAt: CreationOptional<Date>;
}

export function initLogicRuleModel(sequelize: Sequelize) {
  LogicRule.init(
    {
      id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
      },
      questionId: { type: DataTypes.UUID, allowNull: false },
      conditionType: {
        type: DataTypes.ENUM("equals", "not_equals", "any_answer"),
        allowNull: false,
      },
      conditionValue: { type: DataTypes.STRING(500), allowNull: true },
      action: {
        type: DataTypes.ENUM("skip_to_question", "end_survey"),
        allowNull: false,
      },
      targetQuestionId: { type: DataTypes.UUID, allowNull: true },
      createdAt: DataTypes.DATE,
      updatedAt: DataTypes.DATE,
    },
    { sequelize, modelName: "LogicRule", tableName: "LogicRules" }
  );
  return LogicRule;
}
