<?php

namespace App\ServiceModule\Presenters;

use Nette,
	Andweb,
	Symfony\Component\Yaml\Dumper,
	Symfony\Component\Yaml\Yaml,
	Andweb\Yml;



class YmlGeneratorPresenter extends Andweb\Application\UI\Presenter
{
    /**
     * Database connection
     *
     * @var Andweb\Database\Context
     * @inject
     */
    public $connection;

	/* defaultni hodnoty */
	protected $defaults;

	/* pole ktere drzi hodnoty nase */
	protected $arr;
	

	public function __construct()
	{
		
	}


	public function getDataFromRow($id = 1)
	{
		/* [2] Vyber dat z DB
		---------------------------------------------------------------------------------------------------- */
		// kontejner
		$container = $this->connection->table('hosting_service_docker_container')->where('id', $id)->fetch();
		$containerArr = $container->toArray();
		// networks
		$networks = $container->related('hosting_service_docker_container_network');
		$networksArr = [];
		foreach ($networks as $network)
		{
			$networksArr[] = $network->hosting_service_docker_network->name;
		}
		// ports
		$ports = $container->related('hosting_service_docker_expose');
		$portsArr = [];
		$index = 0;
		foreach ($ports as $port)
		{
			$portsArr[$index++] = [
				'target'    => $port->destination,
				'published' => $port->source,
				'protocol'  => $port->proto,
				//'mode'      => $this->defaults['ports']['mode'], // doplneno v builderu
			];
		}
		// volumes
		$volumes = $container->related('hosting_service_docker_volume');
		$volumesArr = [];
		foreach ($volumes as $volume)
		{
			$volumesArr[] = implode(':', [ implode('/', [$volume->volume_dir, $volume->volume_file]), $volume->destination]);
		}
		// environments
		$environments = $container->related('hosting_service_docker_env');
		$environmentsArr = [];
		foreach ($environments as $env)
		{
			$environmentsArr[$env->env_name] = $env->env_value;
		}

		return [
			'container' => $container,
			'containerArr' => $containerArr,
			'networksArr' => $networksArr,
			'volumesArr' => $volumesArr,
			'portsArr' => $portsArr,
			'environmentsArr' => $environmentsArr

		];
	}





	public function actionYml()
	{
		$defaults = (new Yml\DefaultSettings)->getDefaultSettings();
		$builder = new Yml\DockerComposeBuilder($defaults);

		// hlavicka
		$builder->createHeader();
		
		// jednotlivy kontejnery
		$builder->createSection($container1 = $this->getDataFromRow(1));
		$builder->createSection($container2 = $this->getDataFromRow(2));

		// paticka
		$builder->createFooter($container1['networksArr']);
		$builder->createFooter($container2['networksArr']);

		// DUMP
		$dumper = new Dumper();
		$yaml = $dumper->dump($builder->getArr(), 7);
		
		echo $yaml;
		file_put_contents(INDEX_DIR . '/yml/demo.yml', $yaml);

		$this->terminate();
	}



	public function actionArr()
	{
		$defaults = (new Yml\DefaultSettings)->getDefaultSettings();
		$restorer = new Yml\RestoreResolver($defaults);
		
		$restorer->resolveData(Yaml::parse(file_get_contents(INDEX_DIR . '/yml/demo-test.yml')));

		\Tracy\Debugger::dump($restorer->getSanitizedData());
		$this->terminate();
	}



}