var EHDI = EHDI || Object.create(null);

EHDI.components = EHDI.components || Object.create(null);

EHDI.components.ScoreManager = function(stage) {
    var score = 0;
    var scoreContainer = new EHDI.aka.Container();
    stage.addChild(scoreContainer);
    var containerSprite = new EHDI.aka.Sprite(EHDI.Assets.images["gfx_container"]);

    scoreContainer.addChild(containerSprite);


    // var scoreHeader = new EHDI.aka.PixiText("SCORE: ", {fontFamily: 'proximanova-black', fill: 0xFFFFFF, fontSize: 17});
    var scoreHeader = new EHDI.displays.TextSprite(EHDI.GAME.JSONMgr.getLocale("LBL_SCORE_HEADER"));

    scoreHeader.anchor.x = 0.5;
    scoreHeader.anchor.y = 0.5;
    scoreHeader.position.set(containerSprite.width * 0.19, containerSprite.height * 0.4);
    scoreContainer.addChild(scoreHeader);

    // var scoreTxt = new EHDI.aka.PixiText("0", {fontFamily: 'proximanova-black', fill: 0xFFFFFF, fontSize: 36});
    var scoreTxt = new EHDI.displays.TextSprite(EHDI.GAME.JSONMgr.getLocale("SCORE_FORMAT"));

    scoreTxt.anchor.x = 0.5;
    scoreTxt.anchor.y = 0.5;

    scoreTxt.position.set(containerSprite.width * 0.675, containerSprite.height * 0.45);
    scoreContainer.addChild(scoreTxt);

    var flash = new EHDI.aka.Sprite(EHDI.Assets.images["gfx_container_white"]);
    scoreContainer.addChild(flash);
    flash.alpha = 0;
    flash.visible = false;

    var sparkle = new EHDI.aka.Sprite(EHDI.Assets.images["gfx_flare_star"]);
    sparkle.anchor.set(0.5, 0.5);
    sparkle.position.set(scoreHeader.x, scoreHeader.y);
    sparkle.scale.set(0, 0);

    scoreContainer.addChild(sparkle);

    var line = new EHDI.aka.Sprite(EHDI.Assets.images["gfx_flare_long"]);
    line.anchor.set(0.5, 0.5);
    line.position.set(containerSprite.width * 0.5, containerSprite.height * 0.4);
    line.scale.set(0, 1);
    scoreContainer.addChild(line);


    var getScore = function() {
        return score;
    }

    var setDisplayPosition = function(x,y) {
        scoreContainer.position.set(x,y);
    }

    var toggleEffects = function(bool) {
        line.visible = bool;
        sparkle.visible = bool;
    }

    var toggleFlash  = function(bool) {
        flash.visible = bool;
    }
    toggleEffects();

    var onScoreTimeline = null;

    var createTimeline = function(){
      onScoreTimeline = new TimelineMax();
      onScoreTimeline.to(scoreTxt.scale, 0.1, {x: 1.5, y : 1.5});
      onScoreTimeline.to(scoreTxt.scale, 0.1, {x: 1, y : 1});
      onScoreTimeline.addCallback(toggleEffects, "+=0", [true]);
      onScoreTimeline.addCallback(toggleFlash, "+=0", [true]);
      onScoreTimeline.to(sparkle.scale, 0.1, {x: 1, y : 1, ease: Power0.easeNone});
      onScoreTimeline.to(line.scale, 0.2, {x: 1, y : 1, ease: Power0.easeNone}, "-=0.1");
      onScoreTimeline.to(flash, 0.05, {alpha : 0.75});
      onScoreTimeline.to(sparkle, 0.15, {x: containerSprite.width * 0.9, rotation: 5, ease: Power0.easeNone}, "-=0.15");
      onScoreTimeline.to(flash, 0.1, {alpha : 0}, "-=0.025");
      onScoreTimeline.addCallback(toggleFlash, "-=0.05", [false]);
      onScoreTimeline.addCallback(toggleEffects, "+=0.025", [false]);
      // onScoreTimeline.pause();
    }

    var addToScore = function (scoreToAdd) {
        score += scoreToAdd;
        scoreTxt.text = score;
        if(!onScoreTimeline){
          createTimeline();
        }else{
          onScoreTimeline.restart();
          onScoreTimeline.play();
        }
    };

    var dispose = function() {
        // onScoreTimeline.kill();
        if(onScoreTimeline) onScoreTimeline.kill();
        scoreContainer.destroy({children: true});
    };


    return {
        addScore : addToScore,
        getScore : getScore,
        setXY : setDisplayPosition,
        dispose : dispose
    };
};