import { TicketPriority, TicketSource, TicketStatus } from '../../../common/enum/ticket.enum';
import { UserEntity } from '../../../modules/user/entity/users.entity';
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm';
import { Comment } from './comment.entity';

@Entity('tickets') // Explicitly define table name
export class Ticket {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column('text')
  description: string;

  @Column({
    type: 'enum',
    enum: TicketStatus,
    default: TicketStatus.OPEN,
  })
  status: TicketStatus;

  @Column({
    type: 'enum',
    enum: TicketPriority,
    default: TicketPriority.MEDIUM,
  })
  priority: TicketPriority;

  @Column({
    type: 'enum',
    enum: TicketSource,
    default: TicketSource.MANUAL,
  })
  source: TicketSource;

  @Column({ unique: true, name: 'ticket_token' })
  ticketToken: string;

  // @ManyToOne(() => UserEntity, user => user.tickets)
  // @JoinColumn({ name: 'author_id' })
  // author: UserEntity;

  @Column({ name: 'author_id', nullable: true })
  authorId: number;

  @ManyToOne(() => UserEntity, user => user.assignedTickets, { nullable: true })
  @JoinColumn({ name: 'assignee_id' })
  assignee: UserEntity;

  @Column({ name: 'assignee_id', nullable: true })
  assigneeId: number;

  @Column({ name: 'attachment_url', nullable: true })
  attachmentUrl: string;

  @Column('simple-array', { nullable: true })
  labels: string[];

  @Column({ name: 'reference_id', nullable: true })
  referenceId: number;

  @Column({ name: 'reference_type', nullable: true })
  referenceType: string;

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

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

  @OneToMany(() => Comment, comment => comment.ticket)
  comments: Comment[];
}
