import {
  Column,
  CreateDateColumn,
  Entity,
  Index,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
} from 'typeorm';

@Entity({ name: 'shares' })
@Index('idx_shares_member', ['memberId'])
@Index('idx_shares_status_type', ['status', 'shareType'])
export class Share {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

  @Index()
  @Column({ type: 'varchar', name: 'share_number', length: 30, nullable: true })
  shareNumber?: string;

  @Column({ type: 'varchar', name: 'certificate_number', length: 50, nullable: true })
  certificateNumber?: string;

  @Column({ type: 'varchar', name: 'member_id', nullable: true })
  memberId?: string;

  @Column({ type: 'varchar', name: 'member_code', length: 30, nullable: true })
  memberCode?: string;

  @Column({ type: 'varchar', name: 'member_name', length: 200, nullable: true })
  memberName?: string;

  @Column({ type: 'varchar', name: 'share_type', length: 30, default: 'general' })
  shareType!: string;

  @Column({ type: 'varchar', name: 'status', length: 30, default: 'active' })
  status!: string;

  @Column({ type: 'varchar', name: 'number_of_shares', nullable: true })
  numberOfShares?: string;

  @Column({ type: 'varchar', name: 'face_value', nullable: true })
  faceValue?: string;

  @Column({ type: 'varchar', name: 'purchase_amount', nullable: true })
  purchaseAmount?: string;

  @Column({ type: 'varchar', name: 'purchase_date', nullable: true })
  purchaseDate?: string;

  @Column({ type: 'varchar', name: 'purchase_date_bs', length: 15, nullable: true })
  purchaseDateBs?: string;

  @Column({ type: 'varchar', name: 'fiscal_year', length: 15, nullable: true })
  fiscalYear?: string;

  @Column({ type: 'varchar', name: 'certificate_issued_date', nullable: true })
  certificateIssuedDate?: string;

  @Column({ type: 'varchar', name: 'certificate_issued_date_bs', length: 15, nullable: true })
  certificateIssuedDateBs?: string;

  @Column({ type: 'varchar', name: 'office_id', nullable: true })
  officeId?: string;

  @Column({ type: 'varchar', name: 'transferred_to_member_id', nullable: true })
  transferredToMemberId?: string;

  @Column({ type: 'varchar', name: 'transferred_to_member_name', length: 200, nullable: true })
  transferredToMemberName?: string;

  @Column({ type: 'varchar', name: 'transfer_date', nullable: true })
  transferDate?: string;

  @Column({ type: 'varchar', name: 'transfer_date_bs', length: 15, nullable: true })
  transferDateBs?: string;

  @Column({ type: 'varchar', name: 'remarks', nullable: true })
  remarks?: string;

  @CreateDateColumn({ name: 'created_at' })
  createdAt!: Date;

  @UpdateDateColumn({ name: 'updated_at' })
  updatedAt!: Date;
}
