#include "OptionsLayer.h"
#include "GameManager.h"
#include "MainMenuLayer.h"

USING_NS_CC;
using namespace ui;


Scene* OptionsLayer::createScene()
{
	auto scene = Scene::create();
	auto layer = OptionsLayer::create();
	scene->addChild(layer);
	return scene;
}

bool OptionsLayer::init(){
	if (!BaseMenuLayer::init()){
		return false;
	}
	int marginX = 50 * getScaleX();
	int marginY = _visibleSize.height - 100 * getScaleY();


	//Label para ajustar sonidos de fondo
	_backGroundVolumeLabel = Label::createWithTTF("0", "fonts/arial.ttf", 16);
	_backGroundVolumeLabel->setAnchorPoint(Point(0, 1));
	_backGroundVolumeLabel->setTextColor(Color4B::BLACK);
	_ostr << GameManager::getInstance()->getBgVolume();
	_backGroundVolumeLabel->setString("Background volume: " + _ostr.str());
	_ostr.str("");
	_backGroundVolumeLabel->setPosition(Point(marginX, marginY));
	addChild(_backGroundVolumeLabel);

	//slider para ajustar volumen de fondo
	_backGroundVolume = Slider::create();
	_backGroundVolume->loadBarTexture("Slider_Back", Widget::TextureResType::PLIST);
	_backGroundVolume->loadSlidBallTextures("SliderNode_Normal", "SliderNode_Press", "SliderNode_Disable", Widget::TextureResType::PLIST);
	_backGroundVolume->loadProgressBarTexture("Slider_PressBar", Widget::TextureResType::PLIST);
	_backGroundVolume->setAnchorPoint(Point(0, 1));
	marginY -= 5 * getScaleY() + _backGroundVolumeLabel->getBoundingBox().size.height;
	_backGroundVolume->setPosition(Point(marginX, marginY));
	_backGroundVolume->setPercent(GameManager::getInstance()->getBgVolume());
	_backGroundVolume->addEventListener(CC_CALLBACK_0(OptionsLayer::actionBackGroundVolumeSlider, this));
	addChild(_backGroundVolume);

	//Label para ajustar volumen de efectos
	_effectsVolumeLabel = Label::createWithTTF("0", "fonts/arial.ttf", 16);
	_ostr << GameManager::getInstance()->getEffectsVolume();
	_effectsVolumeLabel->setString("Effects volume: " + _ostr.str());
	_ostr.str("");
	_effectsVolumeLabel->setTextColor(Color4B::BLACK);
	_effectsVolumeLabel->setAnchorPoint(Point(0, 1));
	marginY -= 50 * getScaleY() + _backGroundVolume->getBoundingBox().size.height;
	_effectsVolumeLabel->setPosition(Point(marginX, marginY));
	addChild(_effectsVolumeLabel);

	//Slider para ajustar volumen de efectos
	_effectsVolume = Slider::create();
	_effectsVolume->loadBarTexture("Slider_Back", Widget::TextureResType::PLIST);
	_effectsVolume->loadSlidBallTextures("SliderNode_Normal", "SliderNode_Press", "SliderNode_Disable", Widget::TextureResType::PLIST);
	_effectsVolume->loadProgressBarTexture("Slider_PressBar", Widget::TextureResType::PLIST);
	_effectsVolume->setAnchorPoint(Point(0, 1));
	marginY -= 5 * getScaleY() + _effectsVolumeLabel->getBoundingBox().size.height;
	_effectsVolume->setPosition(Point(marginX, marginY));
	_effectsVolume->setPercent(GameManager::getInstance()->getEffectsVolume());
	_effectsVolume->addEventListener(CC_CALLBACK_0(OptionsLayer::actionEffectsVolumeSlider, this));
	addChild(_effectsVolume);


	//boton de ir hacia atras
	auto backBt = Button::create("back0", "back1", "back1", Widget::TextureResType::PLIST);
	backBt->setAnchorPoint(Point(0, 0.5));
	backBt->addClickEventListener(CC_CALLBACK_0(OptionsLayer::actionButtonBack, this));
	backBt->setPosition(Point(42.5* getScaleX(), 50 * getScaleY()));
	addChild(backBt);
	return true;
}

void OptionsLayer::actionBackGroundVolumeSlider(){
	_ostr << _backGroundVolume->getPercent();
	_backGroundVolumeLabel->setString("Background volume: " + _ostr.str());
	_ostr.str("");
	GameManager::getInstance()->setBgVolume(_backGroundVolume->getPercent());
}
void OptionsLayer::actionEffectsVolumeSlider(){
	_ostr << _effectsVolume->getPercent();
	_effectsVolumeLabel->setString("Effects volume: " + _ostr.str());
	_ostr.str("");
	GameManager::getInstance()->setEffectsVolume(_effectsVolume->getPercent());
}

//guarda la configuracion y va al menu principal 
void OptionsLayer::actionButtonBack()
{
	GameManager::getInstance()->saveSetting();
	Director::getInstance()->replaceScene(TransitionFlipX::create(1, MainMenuLayer::createScene()));
}