import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn } from 'typeorm';
import { User } from '../users/user.entity';

export type MediaFileType = 'IMAGE' | 'VIDEO' | 'AUDIO' | 'DOCUMENT' | 'TEMPLATE' | 'OTHER';

@Entity({ name: 'media' })
export class Media {
  @PrimaryGeneratedColumn({ type: 'bigint' })
  id!: number;

  @Column({ type: 'varchar', length: 512 })
  fileName!: string;

  @Column({ type: 'varchar', length: 32, default: 'OTHER' })
  fileType!: MediaFileType;

  @Column({ type: 'varchar', length: 128 })
  mimeType!: string;

  @Column({ type: 'bigint', default: 0 })
  fileSize!: number;

  @Column({ type: 'varchar', length: 1024 })
  storagePath!: string;

  @Column({ type: 'varchar', length: 1024, nullable: true })
  thumbnailPath?: string;

  @Column({ type: 'varchar', length: 512, nullable: true })
  caption?: string;

  @Column({ type: 'varchar', length: 512, nullable: true })
  altText?: string;

  @Column({ type: 'enum', enum: ['ACTIVE', 'DELETED'], default: 'ACTIVE' })
  status!: string;

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

  @ManyToOne(() => User, { onDelete: 'SET NULL', nullable: true })
  @JoinColumn({ name: 'created_by' })
  creator?: User;

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

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