import {
  Column,
  CreateDateColumn,
  Entity,
  Index,
  ManyToOne,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { LoanAccount } from './loan-account.entity';

@Entity({ name: 'loan_payments' })
export class LoanPayment {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

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

  @ManyToOne(() => LoanAccount, (la) => la.payments, { onDelete: 'CASCADE' })
  loanAccount!: LoanAccount;

  /** Voucher / receipt number */
  @Column({ type: 'varchar', name: 'voucher_number', length: 50, nullable: true })
  voucherNumber?: string;

  @Column({ type: 'varchar', name: 'payment_date', length: 20, nullable: true })
  paymentDate?: string;

  @Column({ type: 'varchar', name: 'payment_date_bs', length: 20, nullable: true })
  paymentDateBs?: string;

  // ── Amounts ───────────────────────────────────────────────────────────────
  /** Principal repaid in this payment */
  @Column({ name: 'principal_amount', type: 'decimal', precision: 15, scale: 2, default: 0 })
  principalAmount!: number;

  /** Interest paid in this payment */
  @Column({ name: 'interest_amount', type: 'decimal', precision: 15, scale: 2, default: 0 })
  interestAmount!: number;

  /** Late/overdue penalty paid */
  @Column({ name: 'penalty_amount', type: 'decimal', precision: 15, scale: 2, default: 0 })
  penaltyAmount!: number;

  /** Total of all three */
  @Column({ name: 'total_amount', type: 'decimal', precision: 15, scale: 2, default: 0 })
  totalAmount!: number;

  /** Remaining principal balance after this payment */
  @Column({ name: 'balance_after', type: 'decimal', precision: 15, scale: 2, default: 0 })
  balanceAfter!: number;

  /** regular | advance | partial | final_settlement */
  @Column({ type: 'varchar', name: 'payment_type', length: 30, default: 'regular' })
  paymentType!: string;

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

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

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