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

/** ऋण नवीकरण — Credit / Loan Renewal */
@Entity({ name: 'credit_renews' })
export class CreditRenew {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

  @Index()
  @Column({ type: 'varchar', length: 36 })
  loanAccountId!: string;

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

  @Column({ type: 'varchar', length: 250 })
  memberName!: string;

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

  @Column({ type: 'decimal', precision: 14, scale: 2, nullable: true })
  renewAmount?: number;

  @Column({ type: 'varchar', length: 500, nullable: true })
  renewAmountWords?: string;

  @Column({ type: 'decimal', precision: 8, scale: 2, nullable: true })
  interestRate?: number;

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

  /** months | years */
  @Column({ type: 'varchar', length: 20, nullable: true })
  loanPeriodType?: string;

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

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

  @Column({ type: 'decimal', precision: 14, scale: 2, nullable: true })
  paymentAmount?: number;

  @Column({ type: 'varchar', length: 500, nullable: true })
  paymentAmountWords?: string;

  /** emi | bullet | quarterly | semi_annual | annual */
  @Column({ type: 'varchar', length: 30, nullable: true })
  paymentType?: string;

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

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

  /** draft | approved | rejected | active */
  @Column({ type: 'varchar', length: 30, default: 'draft' })
  status!: string;

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

  @Column({ type: 'varchar', length: 36, nullable: true })
  createdById?: string;

  @Column({ type: 'varchar', length: 250, nullable: true })
  createdByName?: string;

  @CreateDateColumn()
  createdAt!: Date;

  @UpdateDateColumn()
  updatedAt!: Date;

  @DeleteDateColumn()
  deletedAt?: Date;
}
