import {
  Table,
  Model,
  Column,
  DataType,
  ForeignKey,
  CreatedAt,
  UpdatedAt,
  HasMany,
  BelongsTo,
} from 'sequelize-typescript';
import { RentalModel } from './rental.entity';
import { HirerChangeRequestTypeEnum } from '../enum/rental-hirer-change-request-type';
import { HirerChangeRequestStatusEnum } from '../enum/rental-hirer-change-request-status';
import { HirerChangeRequestSignatureModel } from './hirer-change-request-signature.entity';
import { IRentalHirerChangeRequestAttr } from '../interfaces/rental-hirer-change-request.attr.interface';
import { HirerChangeRequestHirerRoleEnum } from '../enum/rental-hirer-change-request-hirer-role';

@Table({
  tableName: 'rental_HirerChangeRequest',
})
export class RentalHirerChangeRequestModel
  extends Model
  implements IRentalHirerChangeRequestAttr
{
  @Column({
    primaryKey: true,
    allowNull: false,
    type: DataType.STRING(30),
  })
  RequestId: string;

  @ForeignKey(() => RentalModel)
  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  RentalId: string;

  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  Type: HirerChangeRequestTypeEnum;

  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  Status: HirerChangeRequestStatusEnum;

  @CreatedAt
  RequestedAt: Date;

  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  RequestedById: string;

  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  RequestingHirerId: string;

  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  RequestingHirerType: HirerChangeRequestHirerRoleEnum; // Assuming this is the correct type, adjust if necessary

  @Column({
    allowNull: true,
    type: DataType.STRING(300),
  })
  CancelRemarks: string;

  @UpdatedAt
  UpdatedAt: Date;

  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  UpdatedById: string;

  @BelongsTo(() => RentalModel)
  Rental: RentalModel;

  @HasMany(() => HirerChangeRequestSignatureModel)
  HirerList: HirerChangeRequestSignatureModel[];
}
