import {
  BelongsTo,
  Column,
  DataType,
  ForeignKey,
  HasMany,
  Model,
  Table,
} from 'sequelize-typescript';
import { IFeedHistoryAttr } from '../interfaces/price-feed-history-attr.interface';
import TomeiPriceHistoryModel from './price-tomei-price-history.entity';
import SourceFeedModel from './price-source-feed.entity';
import { SourceFeedName } from '../enum/feed.enum';

@Table({
  tableName: 'price_FeedHistory',
  timestamps: false,
})
export default class FeedHistoryModel
  extends Model
  implements IFeedHistoryAttr
{
  @Column({
    primaryKey: true,
    allowNull: false,
    type: DataType.STRING(30),
  })
  FeedHistoryId: string;

  @ForeignKey(() => SourceFeedModel)
  @Column({
    allowNull: false,
    type: DataType.STRING(50),
  })
  FeedName: SourceFeedName;

  @Column({
    allowNull: false,
    type: DataType.DATE,
  })
  DateTime: Date;

  @Column({
    allowNull: false,
    type: DataType.STRING(3),
  })
  Currency: string;

  @Column({
    allowNull: false,
    type: DataType.DECIMAL(10, 2),
  })
  SourceFeedBuyPrice: number;

  @Column({
    allowNull: false,
    type: DataType.DECIMAL(10, 2),
  })
  SourceFeedSellPrice: number;

  @Column({
    allowNull: false,
    type: DataType.DECIMAL(10, 2),
  })
  FeedBuyPrice: number;

  @Column({
    allowNull: false,
    type: DataType.DECIMAL(10, 2),
  })
  FeedSellPrice: number;

  @Column({
    allowNull: false,
    type: DataType.CHAR(1),
  })
  IsSourceFeedAvailableYN: string;

  @Column({
    allowNull: false,
    type: DataType.CHAR(1),
  })
  IsManualPriceActivatedYN: string;

  @Column({
    allowNull: false,
    type: DataType.CHAR(1),
  })
  IsManualCutOffYN: string;

  @Column({
    allowNull: false,
    type: DataType.CHAR(1),
  })
  IsCircuitBreakerActivatedYN: string;

  @BelongsTo(() => SourceFeedModel)
  SourceFeed: SourceFeedModel;

  @HasMany(() => TomeiPriceHistoryModel)
  TomeiPriceHistories: TomeiPriceHistoryModel[];
}
