import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  ManyToOne,
  JoinColumn,
  CreateDateColumn,
  UpdateDateColumn,
  Index,
} from 'typeorm';
import { Classroom } from './classroom.entity';
import { Organization } from './organization.entity';

export enum ClassroomRentalStatus {
  ACTIVE = 'active',
  ENDED = 'ended',
  CANCELLED = 'cancelled',
}

@Entity('classroom_rentals')
@Index(['classroomId', 'startDate', 'endDate'])
export class ClassroomRental {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ name: 'classroom_id' })
  classroomId: number;

  @ManyToOne(() => Classroom)
  @JoinColumn({ name: 'classroom_id' })
  classroom: Classroom;

  @Column({ name: 'lessor_organization_id', nullable: true })
  lessorOrganizationId: number;

  @ManyToOne(() => Organization)
  @JoinColumn({ name: 'lessor_organization_id' })
  lessorOrganization: Organization;

  @Column({ name: 'lessee_organization_id', nullable: true })
  lesseeOrganizationId: number;

  @ManyToOne(() => Organization)
  @JoinColumn({ name: 'lessee_organization_id' })
  lesseeOrganization: Organization;

  @Column({ name: 'start_date', type: 'date' })
  startDate: string;

  @Column({ name: 'end_date', type: 'date' })
  endDate: string;

  // 合同 PDF 相对路径（相对 UPLOAD_DIR），仅存文件名
  @Column({ name: 'contract_path', length: 255, nullable: true })
  contractPath: string;

  @Column({ name: 'contract_original_name', length: 255, nullable: true })
  contractOriginalName: string;

  @Column({ name: 'daily_rate', type: 'decimal', precision: 10, scale: 2, nullable: true })
  dailyRate: number;

  @Column({ name: 'total_amount', type: 'decimal', precision: 10, scale: 2, nullable: true })
  totalAmount: number;

  @Column({ type: 'varchar', length: 20, default: ClassroomRentalStatus.ACTIVE })
  status: ClassroomRentalStatus | 'active' | 'ended' | 'cancelled';

  @Column({ type: 'text', nullable: true })
  notes: string;

  @Column({ name: 'created_by', nullable: true })
  createdBy: number;

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

  @UpdateDateColumn({ name: 'updated_at' })
  updatedAt: Date;
}
