import BattleScene from "../battle-scene";

export enum PokeballType {
  POKEBALL,
  GREAT_BALL,
  ULTRA_BALL,
  MASTER_BALL,
  LUXURY_BALL
};

export function getPokeballAtlasKey(type: PokeballType): string {
  switch (type) {
    case PokeballType.POKEBALL:
      return 'pb';
    case PokeballType.GREAT_BALL:
      return 'gb';
    case PokeballType.ULTRA_BALL:
      return 'ub';
    case PokeballType.MASTER_BALL:
      return 'mb';
    case PokeballType.LUXURY_BALL:
      return 'lb';
  }
}

export function getPokeballName(type: PokeballType): string {
  let ret: string;
  switch (type) {
    case PokeballType.POKEBALL:
      ret = 'Poké Ball';
      break;
    case PokeballType.GREAT_BALL:
      ret = 'Great Ball';
      break;
    case PokeballType.ULTRA_BALL:
      ret = 'Ultra Ball';
      break;
    case PokeballType.MASTER_BALL:
      ret = 'Master Ball';
      break;
    case PokeballType.LUXURY_BALL:
      ret = 'Luxury Ball';
      break;
  }
  return ret;
}

export function getPokeballCatchMultiplier(type: PokeballType): number {
  switch (type) {
    case PokeballType.POKEBALL:
      return 1;
    case PokeballType.GREAT_BALL:
      return 1.5;
    case PokeballType.ULTRA_BALL:
      return 2;
    case PokeballType.MASTER_BALL:
      return -1;
    case PokeballType.LUXURY_BALL:
      return 1;
  }
}

export function getPokeballTintColor(type: PokeballType): number {
  switch (type) {
    case PokeballType.POKEBALL:
      return 0xd52929;
    case PokeballType.GREAT_BALL:
      return 0x94b4de;
    case PokeballType.ULTRA_BALL:
      return 0xe6cd31;
    case PokeballType.MASTER_BALL:
      return 0xa441bd;
    case PokeballType.LUXURY_BALL:
      return 0xffde6a;
  }
}

export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameObjects.Sprite, y1: number, y2: number, baseBounceDuration: integer, callback: Function) {
  let bouncePower = 1;
  let bounceYOffset = y1;
  let bounceY = y2;
  let yd = y2 - y1;

  const doBounce = () => {
    scene.tweens.add({
      targets: pokeball,
      y: y2,
      duration: bouncePower * baseBounceDuration,
      ease: 'Cubic.easeIn',
      onComplete: () => {
        scene.playSound('pb_bounce_1', { volume: bouncePower });

        bouncePower = bouncePower > 0.01 ? bouncePower * 0.5 : 0;

        if (bouncePower) {
          bounceYOffset = yd * bouncePower;
          bounceY = y2 - bounceYOffset;

          scene.tweens.add({
            targets: pokeball,
            y: bounceY,
            duration: bouncePower * baseBounceDuration,
            ease: 'Cubic.easeOut',
            onComplete: () => doBounce()
          });
        } else if (callback)
          callback();
      }
    });
  };

  doBounce();
}