import {
  BaseEntity,
  Column,
  Entity,
  EntityManager,
  PrimaryGeneratedColumn,
} from 'typeorm';

@Entity()
export class SlackUser extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ default: null })
  slackId: number;

  @Column()
  name: string;

  @Column({ default: null })
  avatarUrl: string;

  static async getUpdatedBySlackUser(
    slackUser: any,
    manager: EntityManager
  ): Promise<SlackUser> {
    let entity = await this.findOne({ where: { slackId: slackUser.id } });

    const name = slackUser.profile.display_name || slackUser.profile.real_name;

    if (entity != null) {
      if (entity.name !== name) {
        entity.name = name;
      }

      if (entity.avatarUrl !== slackUser.profile.image_48) {
        entity.avatarUrl = slackUser.profile.image_48;
      }
    } else {
      entity = new SlackUser();
      entity.slackId = slackUser.id;
      entity.name = name;
      entity.avatarUrl = slackUser.profile.image_48;
    }

    await manager.save(entity);

    return entity;
  }
}
