import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  ManyToOne,
  JoinColumn,
} from "typeorm"
import { BaseEntity } from "../../common/entities/base.entity"
import { Company } from "../../company/entities/company.entity"
import { Employee } from "../../employees/entities/employee.entity"
import { LeaveRequest } from "./leave-request.entity"

export enum ApprovalAction {
  APPROVED = "APPROVED",
  REJECTED = "REJECTED",
}

@Entity("leave_request_approval_logs")
export class LeaveRequestApprovalLog extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number

  @Column({ type: "int", nullable: false })
  leave_request_id: number

  @Column({
    type: "varchar",
    length: 10,
    nullable: false,
  })
  action: string

  @Column({ type: "int", nullable: true })
  approved_by: number

  @Column({ type: "int", nullable: true })
  rejected_by: number

  @Column({ type: "text", nullable: true })
  reject_reason: string

  @Column({ type: "int", nullable: false })
  company_id: number

  // Relations
  @ManyToOne(() => LeaveRequest, { onDelete: "CASCADE" })
  @JoinColumn({ name: "leave_request_id" })
  leaveRequest: LeaveRequest

  @ManyToOne(() => Employee)
  @JoinColumn({ name: "approved_by" })
  approvedByEmployee: Employee

  @ManyToOne(() => Employee)
  @JoinColumn({ name: "rejected_by" })
  rejectedByEmployee: Employee

  @ManyToOne(() => Company)
  @JoinColumn({ name: "company_id" })
  company: Company
}
