package funkin.ui;

import flixel.FlxSprite;

/**
 * The icon that gets used for Freeplay capsules and char select
 * NOT to be confused with the CharIcon class, which is for the in-game icons
 */
class PixelatedIcon extends FlxSprite
{
  public function new(x:Float, y:Float)
  {
    super(x, y);
    this.makeGraphic(32, 32, 0x00000000);
    this.antialiasing = false;
    this.active = false;
  }

  public function setCharacter(char:String):Void
  {
    var charPath:String = "freeplay/icons/";

    switch (char)
    {
      case 'monster-christmas':
        charPath += 'monsterpixel';
      case 'mom-car':
        charPath += 'mommypixel';
      case 'darnell-blazin':
        charPath += 'darnellpixel';
      case 'senpai-angry':
        charPath += 'senpaipixel';
      default:
        charPath += '${char}pixel';
    }

    if (!openfl.utils.Assets.exists(Paths.image(charPath)))
    {
      trace('[WARN] Character ${char} has no freeplay icon.');
      return;
    }

    var isAnimated = openfl.utils.Assets.exists(Paths.file('images/$charPath.xml'));

    if (isAnimated)
    {
      this.frames = Paths.getSparrowAtlas(charPath);
    }
    else
    {
      this.loadGraphic(Paths.image(charPath));
    }

    this.scale.x = this.scale.y = 2;

    switch (char)
    {
      case 'parents-christmas':
        this.origin.x = 140;
      default:
        this.origin.x = 100;
    }

    if (isAnimated)
    {
      this.active = true;
      this.animation.addByPrefix('idle', 'idle0', 10, true);
      this.animation.addByPrefix('confirm', 'confirm0', 10, false);
      this.animation.addByPrefix('confirm-hold', 'confirm-hold0', 10, true);

      this.animation.finishCallback = function(name:String):Void {
        trace('Finish pixel animation: ${name}');
        if (name == 'confirm') this.animation.play('confirm-hold');
      };

      this.animation.play('idle');
    }
  }
}