import { AvatarService } from './avatar.service';
import { Injectable, Inject } from 'ng-metadata/core';


@Injectable(AvatarService.name)
export class AvatarServiceImpl implements AvatarService {

  private cache: {[cacheKey: string]: string} = {};

  constructor(@Inject('Config') private Config: any,
              @Inject('md5') private md5: any) {

  }

  public getAvatar(hash: string, size: number = 16, notFound: string = '404'): string {
    var avatarURL: string;
    switch (this.Config['AVATAR_KIND']) {
      case 'local':
        avatarURL = `/avatar/${hash}?size=${size}`;
        break;

      case 'gravatar':
        avatarURL = `//www.gravatar.com/avatar/${hash}?d=${notFound}&size=${size}`;
        break;
    }

    return avatarURL;
  }

  public computeHash(email: string = '', name: string = ''): string {
    const cacheKey: string = email + ':' + name;

    if (this.cache[cacheKey]) {
      return this.cache[cacheKey];
    }

    var hash: string = this.md5.createHash(email.toString().toLowerCase());
    switch (this.Config['AVATAR_KIND']) {
      case 'local':
        if (name) {
          hash = name[0] + hash;
        } else if (email) {
          hash = email[0] + hash;
        }
        break;
    }

    return this.cache[cacheKey] = hash;
  }
}