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

@Entity({ name: 'accounting_vouchers' })
@Index('idx_voucher_type_date', ['voucherType', 'voucherDate'])
export class AccountingVoucher {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

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

  @Column({ type: 'varchar', name: 'voucher_type', length: 10, default: 'JV' })
  voucherType!: string;

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

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

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

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

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

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

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

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

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

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

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

  @Column({ type: 'varchar', name: 'prepared_by', length: 100, nullable: true })
  preparedBy?: string;

  @Column({ type: 'varchar', name: 'checked_by', length: 100, nullable: true })
  checkedBy?: string;

  @Column({ type: 'varchar', name: 'approved_by', length: 100, nullable: true })
  approvedBy?: string;

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

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

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

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

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