import {
  BaseEntity,
  Column,
  CreateDateColumn,
  Entity,
  EntityManager,
  ManyToOne,
  PrimaryGeneratedColumn,
} from 'typeorm';
import { Licensee } from '../licensee/licensee.entity';
import { Message } from '../message/message.entity';

@Entity()
export class Attachment extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  type: string;

  @Column()
  size: number;

  @Column()
  url: string;

  @Column()
  isLocal: boolean;

  @ManyToOne(() => Message, (message) => message.attachments)
  message: Promise<Message>;

  @ManyToOne(() => Licensee, (licensee) => licensee.id)
  licensee: Promise<Licensee>;

  @CreateDateColumn()
  createdOn: Date;

  public static createFromPartial(partial: Partial<Attachment>): Attachment {
    const inst = new Attachment();
    Object.assign(inst, partial);
    return inst;
  }

  public isImage(): boolean {
    const exec = /(image\/)([a-z])+/.exec(this.type);
    return exec !== null && exec[0] === this.type;
  }

  async assignToMessage(message: Message, manager: EntityManager) {
    this.message = Promise.resolve(message);
    await manager.save(this);
  }
}
