import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
import { BaseEntity } from './base.entity';
import { Trip } from './trip.entity';
import { User } from './user.entity';
import { ExpenseParticipant } from './expense-participants.entity';

export enum ExpenseStatus {
  PENDING = 'pending',
  APPROVED = 'approved',
  REJECTED = 'rejected',
}

@Entity('expenses')
export class Expense extends BaseEntity {
  @Column()
  title: string;

  @Column()
  category: string;

  @Column('decimal')
  amount: number;

  @Column({ nullable: true })
  note: string;

  @Column()
  time: Date;

  @ManyToOne(() => Trip, (trip) => trip.expenses)
  trip: Trip;

  @Column({
    type: 'enum',
    enum: ExpenseStatus,
    default: ExpenseStatus.PENDING,
  })
  status: ExpenseStatus;

  @Column({ nullable: true })
  rejectionReason: string;

  @ManyToOne(() => User)
  paidBy: User;

  @ManyToOne(() => User, (user) => user.createdExpenses)
  createdBy: User;

  @OneToMany(() => ExpenseParticipant, (p) => p.expense, {
    cascade: true,
    onDelete: 'CASCADE',
  })
  participants: ExpenseParticipant[];
}
