import { globalScene } from "#app/global-scene";
import * as Utils from "../utils";

export default class SavingIconHandler extends Phaser.GameObjects.Container {
  private icon: Phaser.GameObjects.Sprite;

  private animActive: boolean;
  private shown: boolean;

  constructor() {
    super(globalScene, globalScene.game.canvas.width / 6 - 4, globalScene.game.canvas.height / 6 - 4);
  }

  setup(): void {
    this.icon = globalScene.add.sprite(0, 0, "saving_icon");
    this.icon.setOrigin(1, 1);

    this.add(this.icon);

    this.animActive = false;
    this.shown = false;

    this.setAlpha(0);
    this.setVisible(false);
  }

  show(): void {
    this.shown = true;

    if (this.animActive) {
      return;
    }

    this.animActive = true;

    globalScene.tweens.add({
      targets: this,
      alpha: 1,
      duration: Utils.fixedInt(250),
      ease: "Sine.easeInOut",
      onComplete: () => {
        globalScene.time.delayedCall(Utils.fixedInt(500), () => {
          this.animActive = false;
          if (!this.shown) {
            this.hide();
          }
        });
      }
    });

    this.setVisible(true);
    this.shown = true;
  }

  hide(): void {
    this.shown = false;

    if (this.animActive) {
      return;
    }

    this.animActive = true;

    globalScene.tweens.add({
      targets: this,
      alpha: 0,
      duration: Utils.fixedInt(250),
      ease: "Sine.easeInOut",
      onComplete: () => {
        this.animActive = false;
        this.setVisible(false);
        if (this.shown) {
          this.show();
        }
      }
    });

    this.shown = false;
  }
}