<?php

App::uses('ApiController', 'Controller');
App::uses('Api', 'Model');

require_once 'AjaxTrait.php';


final class SzablonController extends ApiController
{

	use AjaxTrait;

	public function szablony_oceny_pracownika()
	{

	}

	public function daj_szablony_oceny()
	{
		$options = array();

		$resp = $this->Api->DajListeSzablonowOceny($this->_getGid(), $options);

		if (isset($resp['bSzablonOcenyLista']['bSzablonOceny'][0])) {
			$items = $resp['bSzablonOcenyLista']['bSzablonOceny'];
		} elseif(isset($resp['bSzablonOcenyLista']['bSzablonOceny'])) {
			$items[] = $resp['bSzablonOcenyLista']['bSzablonOceny'];
		} else {
			$items = array();
		}

		$rjson = $this->_handle_response_json($resp);

		$this->set(compact('items'));

		if(isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}
	}

	public function daj_oceny_pracownika()
	{
		$options = array();

		$resp = $this->Api->DajListeOcenProfesjonalnych($this->_getGid(), $options);

		if (isset($resp['bSzablonOcenyLista']['bOcenaProfesjonalna'][0])) {
			$items = $resp['bSzablonOcenyLista']['bOcenaProfesjonalna'];
		} elseif(isset($resp['bSzablonOcenyLista']['bOcenaProfesjonalna'])) {
			$items[] = $resp['bSzablonOcenyLista']['bOcenaProfesjonalna'];
		} else {
			$items = array();
		}

		$rjson = $this->_handle_response_json($resp);

		$this->set(compact('items'));

		if(isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}
	}

	public function usun_ocena_pracownika($gid)
	{
		$options = array(
			'gid' =>  $gid
		);

		$response = $this->Api->UsunOceneProfesjonalna($this->_getGid(), $options);

		echo json_encode($this->_handle_response_json($response));
		die();

	}

	public function edytuj_ocena_pracownika($gid)
	{
		if($this->request->is(array('post'))) {

			$arr = $this->request->data;
			$data = array();

			if (is_array($arr['bOcenaProfesjonalna'])) {
				foreach ($arr['bOcenaProfesjonalna'] as $key => $val) {
					preg_match('/(bKryteriumOceny|bWniosekOceny)(\d)(A|B|C?)/', $key, $matches);
					if (isset($matches[1]) && isset($matches[2]) && (isset($matches[3]) &&  $matches[3] === 'C')) {
						$data[$matches[1]][$matches[2]]['bNazwa'] = $val;
					}elseif (isset($matches[1]) && isset($matches[2]) && (isset($matches[3]) &&  $matches[3] === 'B')) {
						$data[$matches[1]][$matches[2]]['bGid'] = $val;
					}elseif (isset($matches[1]) && isset($matches[2]) && (isset($matches[3]) &&  $matches[3] === 'A')) {
						$data[$matches[1]][$matches[2]]['bOpis'] = $val;
					} elseif (isset($matches[1]) && isset($matches[2])) {
						$data[$matches[1]][$matches[2]]['bOcena'] = $val;
					}
				}
			}

			$options = array (
				'bKryteriumOceny' => !empty($data['bKryteriumOceny']) ? $data['bKryteriumOceny'] : array(),
				'bWniosekOceny' => !empty($data['bWniosekOceny']) ? $data['bWniosekOceny'] : array(),
				'bGid' => !empty($arr['bOcenaProfesjonalna']['bGid']) ? $arr['bOcenaProfesjonalna']['bGid'] : '',
				'bDataDo' => !empty($arr['bOcenaProfesjonalna']['bDataDo']) ? substr($arr['bOcenaProfesjonalna']['bDataDo'],0,10) : '',
				'bDataOd' => !empty($arr['bOcenaProfesjonalna']['bDataOd']) ? substr($arr['bOcenaProfesjonalna']['bDataOd'],0, 10) : '',
				'bNazwa' => !empty($arr['bOcenaProfesjonalna']['bNazwa']) ? $arr['bOcenaProfesjonalna']['bNazwa'] : '',
				'bDataUtworzenia' => !empty($arr['bOcenaProfesjonalna']['bDataUtworzenia']) ?substr($arr['bOcenaProfesjonalna']['bDataUtworzenia'], 0 ,10) : '',
			);

			$response = $this->Api->ZapiszOceneProfesjonalna($this->_getGid(), $options);

			$rjson = $this->_handle_response_json($response);

			if(isset($rjson['login']) && !empty($rjson['login'])) {
				echo 'login';
				die();
			}

			echo json_encode($rjson);
			die();
		}

		$resp = $this->Api->DajListeOcenProfesjonalnych($this->_getGid(), array('bGid' => $gid));

		$rjson = $this->_handle_response_json($resp);

		if(isset($rjson['login']) && !empty($rjson['login'])) {
			echo 'login';
			die();
		}

		$ocena  = isset($resp['bSzablonOcenyLista']['bOcenaProfesjonalna']) ? $resp['bSzablonOcenyLista']['bOcenaProfesjonalna'] : array();

		$kryteriaWymagane = array();
		$kryteriaNieWymagane = array();

		if (isset($ocena['bKryteriaOcenyLista']['bKryteriumOceny'][0])) {
			$kryteriaItems = $ocena['bKryteriaOcenyLista']['bKryteriumOceny'];
		} else {
			$kryteriaItems[0] = $ocena['bKryteriaOcenyLista']['bKryteriumOceny'];
		}

		if (isset($ocena['bWnioskiOcenyLista']['bWniosekOceny'][0])) {
			$wnioskiItems = $ocena['bWnioskiOcenyLista']['bWniosekOceny'];
		} else {
			$wnioskiItems[0] = $ocena['bKryteriaOcenyLista']['bKryteriumOceny'];
		}


		foreach ($kryteriaItems as $kryteria) {
			if ($kryteria['bCzyObowiazkowe'] === 'false') {
				$kryteriaNieWymagane[] = $kryteria;
			} else {
				$kryteriaWymagane[] = $kryteria;
			}
		}


		$this->set(compact('ocena', 'kryteriaWymagane', 'kryteriaNieWymagane', 'wnioskiItems', 'gid'));
	}

	public function generuj_oceny($gid)
	{
		$this->render(false);

		if($this->request->is(array('post'))) {
			$options = $this->request->data;
			$response = $this->Api->GenerujOcenyZSzablonu($this->_getGid(), $options);
			echo json_encode($this->_handle_response_json($response));
		}

		die();
	}

	public function edytuj_szablon_oceny($gid)
	{
		$this->view = 'dodaj_szablon_oceny';

		$options = array(
			'gid' => $gid
		);

		$resp = $this->Api->DajListeSzablonowOceny($this->_getGid(), $options);

		$bSzablonOceny = $this->_parse_DajListeSzablonowOceny($resp);

		$this->request->data = array('bSzablonOceny' => $bSzablonOceny);

		$this->set(compact('bSzablonOceny'));
	}

	public function usun_szablon_oceny($gid)
	{
		$this->render(false);

		$options = array(
			'gid' => $gid
		);

		$response = $this->Api->UsunSzablonOceny($this->_getGid(), $options);
		echo json_encode($this->_handle_response_json($response));
		die();
	}

	private function parseKryteriaOcenyDostepneLista(array $list)
	{
		$values['names'] = array();
		$values['groups'] = array();

		if (isset($list['bKryteriumOceny'])) {
			foreach ($list['bKryteriumOceny'] as $item) {
				if (isset($item['bNazwa'])) {
					if (isset($item['bRodzaj']) && $item['bRodzaj'] == 'Grupa') {
						$values['groups'][$item['bNazwa']] = $item['bRodzaj'];
					}
					array_push($values['names'], $item['bNazwa']);
				}
			}
		}

		return $values;
	}

	public function dodaj_szablon_oceny()
	{
		$options = array();

		if($this->request->is(array('post')))
		{
			$options = $this->request->data;

			$response = $this->Api->ZapiszSzablonOceny($this->_getGid(), $options);

			$rjson = $this->_handle_response_json($response);
			if(isset($rjson['login']) && !empty($rjson['login'])) {
				echo 'login';
				die();
			}

			if (!empty($response['Komunikaty']['Komunikat']['Tytul'])) {
				$response['bKomunikaty']['bKomunikat']['bTytul'] = $response['Komunikaty']['Komunikat']['Tytul'];
				$response['bKomunikaty']['bKomunikat']['bRodzaj'] = $response['Komunikaty']['Komunikat']['Rodzaj'];
				$response['bKomunikaty']['bKomunikat']['bOpis'] = $response['Komunikaty']['Komunikat']['Opis'];
			}

			echo json_encode($this->_handle_response_json($response));
			die();
		}

		$resp = $this->Api->DajNowySzablonOceny($this->_getGid(), $options);

		$gId =  !empty($resp['bSzablonOceny']['bGid']) ? $resp['bSzablonOceny']['bGid'] : '';
		$initDate =  !empty($resp['bSzablonOceny']['bDataUtworzenia']) ? $resp['bSzablonOceny']['bDataUtworzenia'] : '';

		$this->request->data = array('bSzablonOceny' => array('bGid' => $gId, 'bDataUtworzenia' => $initDate));

		$this->set(compact('gId', 'initDate'));
	}

	private function _parse_DajListeSzablonowOceny($response)
	{
		$bSzablonOceny = array();

		$convert = function($input) {
			if (is_array($input['cstring'])) {
				$values = implode(';', $input['cstring']);
				return $values;
			} elseif (isset($input['cstring']) && $input['cstring'] !== '') {
				return $input['cstring'];
			} elseif (is_array($input['cdecimal'])) {
				$values = '';
				foreach ($input['cdecimal'] as $val) {
					$values .= (int) $val . ';';
				}
				return rtrim($values, ";");
			} elseif (isset($input['cdecimal']) && $input['cdecimal'] !== 0) {
				return (int) $input['cdecimal'];
			}
			return '';
		};

		if(isset($response['bSzablonOcenyLista']['bSzablonOceny'])) {
			$bSzablonOceny = $response['bSzablonOcenyLista']['bSzablonOceny'];

			$bSzablonOceny['bKomorki'] = $convert($bSzablonOceny['bKomorki']);
			$bSzablonOceny['bCharakteryPracy'] = $convert($bSzablonOceny['bCharakteryPracy']);
			$bSzablonOceny['bMiejscaWykonywaniaPracy'] = $convert($bSzablonOceny['bMiejscaWykonywaniaPracy']);
			$bSzablonOceny['bNumeryEwidencyjne'] = $convert($bSzablonOceny['bNumeryEwidencyjne']);
			$bSzablonOceny['bNumeryEwidencyjneWykluczone'] = $convert($bSzablonOceny['bNumeryEwidencyjneWykluczone']);
			$bSzablonOceny['bPiony'] = $convert($bSzablonOceny['bPiony']);
			$bSzablonOceny['bPlatnicy'] = $convert($bSzablonOceny['bPlatnicy']);
			$bSzablonOceny['bRegiony'] = $convert($bSzablonOceny['bRegiony']);
			$bSzablonOceny['bStanowiska'] = $convert($bSzablonOceny['bStanowiska']);

			if (isset($bSzablonOceny['bKryteriaOcenyLista']['bKryteriumOceny'][0])) {
				$bSzablonOceny['bKryteriaOcenyLista'] = $bSzablonOceny['bKryteriaOcenyLista']['bKryteriumOceny'];
			} elseif (isset($bSzablonOceny['bKryteriaOcenyLista']['bKryteriumOceny'])) {
				$bSzablonOceny['bKryteriaOcenyLista'] = array(0 => $bSzablonOceny['bKryteriaOcenyLista']['bKryteriumOceny']);
			} else {
				$bSzablonOceny['bKryteriaOcenyLista'] = array();
			}

			if (isset($bSzablonOceny['bWnioskiOcenyLista']['bWniosekOceny'][0])) {
				$bSzablonOceny['bWnioskiOcenyLista'] = $bSzablonOceny['bWnioskiOcenyLista']['bWniosekOceny'];
			} elseif (isset($bSzablonOceny['bWnioskiOcenyLista']['bWniosekOceny'])) {
				$bSzablonOceny['bWnioskiOcenyLista'] = array(0 => $bSzablonOceny['bWnioskiOcenyLista']['bWniosekOceny']);
			} else {
				$bSzablonOceny['bWnioskiOcenyLista'] = array();
			}
		}

		return $bSzablonOceny;
	}

	public function daj_kryteria_oceny_pracownika()
	{
		$options = array();

		$resp = $this->Api->DajNowySzablonOceny($this->_getGid(), $options);

		$criteries =  (array) !empty($resp['bSzablonOceny']['bKryteriaOcenyDostepneLista']['bKryteriumOceny']) ? $resp['bSzablonOceny']['bKryteriaOcenyDostepneLista']['bKryteriumOceny'] : array();

		$this->set(compact('criteries'));
	}

	public function daj_wnioski_oceny_pracownika()
	{
		$options = array();

		$resp = $this->Api->DajNowySzablonOceny($this->_getGid(), $options);

		$wnioski =  (array) !empty($resp['bSzablonOceny']['bWnioskiOcenyDostepneLista']['bWniosekOceny']) ? $resp['bSzablonOceny']['bWnioskiOcenyDostepneLista']['bWniosekOceny'] : array();

		$this->set(compact('wnioski'));
	}

}
