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

/**
 * Pool of non-member external guarantors whose data can be reused
 * across multiple loan applications.
 */
@Entity({ name: 'external_guarantors' })
export class ExternalGuarantor {
  @PrimaryGeneratedColumn('uuid')
  id!: string;

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

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

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

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

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

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

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

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

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

  @Column({ type: 'varchar', name: 'citizenship_issue_district', length: 5, nullable: true })
  citizenshipIssueDistrict?: string;

  // ── Permanent address ──────────────────────────────────────
  @Column({ type: 'varchar', name: 'p_province', length: 5, nullable: true })
  pProvince?: string;

  @Column({ type: 'varchar', name: 'p_district', length: 5, nullable: true })
  pDistrict?: string;

  @Column({ type: 'varchar', name: 'p_localgovt', length: 5, nullable: true })
  pLocalgovt?: string;

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

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

  // ── Temporary address ──────────────────────────────────────
  @Column({ type: 'varchar', name: 't_province', length: 5, nullable: true })
  tProvince?: string;

  @Column({ type: 'varchar', name: 't_district', length: 5, nullable: true })
  tDistrict?: string;

  @Column({ type: 'varchar', name: 't_localgovt', length: 5, nullable: true })
  tLocalgovt?: string;

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

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

  // ── Family ────────────────────────────────────────────────
  @Column({ type: 'varchar', name: 'second_generation', length: 50, nullable: true })
  secondGeneration?: string;

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

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

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

  // ── Financial ─────────────────────────────────────────────
  @Column({ type: 'varchar', name: 'monthly_income', nullable: true })
  monthlyIncome?: string;

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

  // ── Photos ────────────────────────────────────────────────
  @Column({ type: 'varchar', name: 'photo_url', nullable: true })
  photoUrl?: string;

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

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

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

  @CreateDateColumn()
  createdAt!: Date;

  @UpdateDateColumn()
  updatedAt!: Date;

  @DeleteDateColumn()
  deletedAt?: Date;
}
