import {
    Column,
    CreateDateColumn,
    DeleteDateColumn,
    Entity,
    Index,
    ManyToOne,
    PrimaryGeneratedColumn,
    UpdateDateColumn,
  } from 'typeorm';
  import { Office } from './office.entity';

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

    // 'darta' = incoming | 'chalani' = outgoing
    @Column({ type: 'varchar', length: 20 })
    type!: string;

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

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

    @Column({ type: 'varchar', length: 600 })
    subject!: string;

    // Letter/document date
    @Column({ type: 'varchar', name: 'letter_date', length: 20, nullable: true })
    letterDate?: string;

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

    // Received/sent date
    @Column({ type: 'varchar', name: 'entry_date', length: 20, nullable: true })
    entryDate?: string;

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

    // Sender (for darta) / Receiver (for chalani)
    @Column({ type: 'varchar', name: 'party_name', nullable: true })
    partyName?: string;

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

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

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

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

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

    @ManyToOne(() => Office, { nullable: true, onDelete: 'SET NULL' })
    office?: Office;

    @Column({ default: true })
    active!: boolean;

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

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

    @CreateDateColumn()
    createdAt!: Date;

    @UpdateDateColumn()
    updatedAt!: Date;

    @DeleteDateColumn()
    deletedAt?: Date;
  }
