import { DataTypes, Model, Optional } from 'sequelize';
import { sequelize } from '@config/database';
import { Form1626asUploadLog } from './Form1626asUploadLog';

export interface Form1626asQuarterSnapshotAttributes {
  id: number;
  tanNumber: string;
  financialYear: string;
  quarter: string;
  aggregatedAmount: number;
  uploadLogId?: number | null;
  createdAt: Date;
}

interface Form1626asQuarterSnapshotCreationAttributes
  extends Optional<Form1626asQuarterSnapshotAttributes, 'id' | 'uploadLogId' | 'createdAt'> {}

class Form1626asQuarterSnapshot
  extends Model<Form1626asQuarterSnapshotAttributes, Form1626asQuarterSnapshotCreationAttributes>
  implements Form1626asQuarterSnapshotAttributes
{
  public id!: number;
  public tanNumber!: string;
  public financialYear!: string;
  public quarter!: string;
  public aggregatedAmount!: number;
  public uploadLogId?: number | null;
  public createdAt!: Date;

  public uploadLog?: Form1626asUploadLog;
}

Form1626asQuarterSnapshot.init(
  {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    tanNumber: {
      type: DataTypes.STRING(20),
      allowNull: false,
      field: 'tan_number',
    },
    financialYear: {
      type: DataTypes.STRING(20),
      allowNull: false,
      field: 'financial_year',
    },
    quarter: {
      type: DataTypes.STRING(10),
      allowNull: false,
    },
    aggregatedAmount: {
      type: DataTypes.DECIMAL(15, 2),
      allowNull: false,
      field: 'aggregated_amount',
    },
    uploadLogId: {
      type: DataTypes.INTEGER,
      allowNull: true,
      field: 'upload_log_id',
      references: { model: 'form_16_26as_upload_log', key: 'id' },
      onDelete: 'SET NULL',
    },
    createdAt: {
      type: DataTypes.DATE,
      allowNull: false,
      field: 'created_at',
    },
  },
  {
    sequelize,
    tableName: 'form_16_26as_quarter_snapshots',
    timestamps: false,
    underscored: true,
  }
);

Form1626asQuarterSnapshot.belongsTo(Form1626asUploadLog, {
  as: 'uploadLog',
  foreignKey: 'uploadLogId',
  targetKey: 'id',
});

export { Form1626asQuarterSnapshot };
