import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  ManyToOne,
  JoinColumn,
  CreateDateColumn,
  Index,
} from 'typeorm';
import { Company } from './company.entity';
import { CompanyBranch } from './company-branch.entity';
import { AuditRequest } from '../../audit-requests/entities/audit-request.entity';

@Entity('company_change_log')
@Index('idx_company_id')
@Index('idx_branch_id')
@Index('idx_created_at')
@Index('idx_audit_request_id')
export class CompanyChangeLog {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: 'company_id', type: 'int' })
  companyId: number;

  @Column({ name: 'branch_id', type: 'int', nullable: true })
  branchId: number | null;

  @Column({ name: 'field_name', type: 'varchar', length: 100 })
  fieldName: string;

  @Column({ name: 'old_value', type: 'text', nullable: true })
  oldValue: string | null;

  @Column({ name: 'new_value', type: 'text', nullable: true })
  newValue: string | null;

  @Column({ name: 'source_audit_id', type: 'int', nullable: true })
  sourceAuditId: number | null;

  @Column({ name: 'changed_by_user_id', type: 'int', nullable: true })
  changedByUserId: number | null;

  @CreateDateColumn({ name: 'created_at', type: 'timestamp' })
  createdAt: Date;

  // Relations
  @ManyToOne(() => Company, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'company_id' })
  company: Company;

  @ManyToOne(() => CompanyBranch, { nullable: true })
  @JoinColumn({ name: 'branch_id' })
  branch: CompanyBranch | null;

  @ManyToOne(() => AuditRequest, { nullable: true })
  @JoinColumn({ name: 'source_audit_id' })
  sourceAudit: AuditRequest | null;
}