import {
  BelongsTo,
  Column,
  DataType,
  ForeignKey,
  Model,
  Table,
} from 'sequelize-typescript';
import { NonSourceFeedName } from '../enum/feed.enum';
import FeedModel from './price-feed.entity';
import { ITomeiPriceLatestAttr } from '../interfaces/price-tomei-price-latest-attr.interface';
import TomeiPriceHistoryModel from './price-tomei-price-history.entity';

@Table({
  tableName: 'price_TomeiPriceLatest',
  timestamps: false,
})
export default class TomeiPriceLatestModel
  extends Model
  implements ITomeiPriceLatestAttr
{
  @ForeignKey(() => FeedModel)
  @Column({
    primaryKey: true,
    allowNull: false,
    type: DataType.STRING(50),
  })
  FeedName: NonSourceFeedName;

  @ForeignKey(() => TomeiPriceHistoryModel)
  @Column({
    allowNull: false,
    type: DataType.STRING(30),
  })
  TomeiPriceHistoryId: string;

  @Column({
    primaryKey: true,
    allowNull: false,
    type: DataType.CHAR(3),
  })
  Currency: string;

  @Column({
    primaryKey: true,
    allowNull: false,
    type: DataType.STRING(10),
    defaultValue: 'CTH',
  })
  CompanyCode: string;

  @Column({
    allowNull: false,
    type: DataType.DATE,
  })
  DateTime: Date;

  @Column({
    allowNull: true,
    type: DataType.DECIMAL(5, 2),
  })
  AdjustBuyPercentage: number;

  @Column({
    allowNull: true,
    type: DataType.DECIMAL(5, 2),
  })
  AdjustSellPercentage: number;

  @Column({
    allowNull: false,
    type: DataType.DECIMAL(10, 2),
  })
  TomeiBuyPrice: number;

  @Column({
    allowNull: false,
    type: DataType.DECIMAL(10, 2),
  })
  TomeiSellPrice: number;

  @Column({
    allowNull: true,
    type: DataType.STRING(30),
  })
  AdjustedById: string;

  @Column({
    allowNull: true,
    type: DataType.DATE,
  })
  AdjustedDateTime: Date;

  @Column({
    allowNull: false,
    type: DataType.DATE,
  })
  UpdatedAt: Date;

  @BelongsTo(() => FeedModel)
  Feed: FeedModel;

  @BelongsTo(() => TomeiPriceHistoryModel)
  TomeiPriceHistory: TomeiPriceHistoryModel;
}
