<?php

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace AdminModule;
use \Nette\Application\UI\Form;
use \Nette\Utils\Image;

 
class PsiPresenter extends BasePresenter {
    
    private $psiModel;
    private $zkouskyModel;
    private $fotkyModel;
    private $strankyModel;
    
    private $urlList = "psi/list";
   
 
    public function __construct(\PsiModel $psiModel,  \ZkouskyModel $zkouskyModel, \FotkyPsuModel $fotkyModel, \StrankyModel $strankyModel) {
    $this->psiModel = $psiModel;
    $this->zkouskyModel = $zkouskyModel;
    $this->fotkyModel = $fotkyModel;
    $this->strankyModel = $strankyModel;
    }
    
         
        public function renderList() {

            $this->template->psi = $this->psiModel->getAktivniPsy(); 
            $this->template->feny = $this->psiModel->getAktivniFeny();
            $this->template->text = $this->strankyModel->getStrankaByUrl($this->urlList);
        }
 
        public function renderArchiv() {

              $this->template->psi = $this->psiModel->getVyrazenePsy(); 
              $this->template->feny = $this->psiModel->getVyrazeneFeny();


        }
        public function renderEdit($id) {
            $this->template->pes = $this->psiModel->getPesById($id);
        }
    
        public function renderEditZkousky($id) {
            $this->template->zkousky = $this->zkouskyModel->getVysledkyByIdPsa($id);
             $this->template->pes = $this->psiModel->getPesById($id);
        }


        public function renderFoto($id) {
            $this->template->fotky = $this->fotkyModel->getFotkyByPesId($id);
             $this->template->pes = $this->psiModel->getPesById($id);

        }

        

        protected function createComponentAddZkouskaForm() {
            $form = new Form();
            $form->addText('druh', 'Druh:');
            $form->addText('body','Body:');
            $form->addText('cena', 'Cena:');
            $form->addText('pole', ' - :');
            $form->addText('nos', 'Nos');
            $form->addText('slideni', 'Slídění:');
            $form->addText('klid', 'Klid po výstřelu:');
            $form->addText('hlasitost', 'Hlasitost:');
            $form->addSubmit("send", "Odeslat");
            $form->onSuccess[] = $this->addZkouskaFormSucceeded;

            return $form;
        }

        public function addZkouskaFormSucceeded(Form $form) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = $form->getValues();
            //$pes = $this->psiModel->getPesById($this->getParam('id'));
            $values->id_psa = $this->getParam('id');
            $this->zkouskyModel->addVysledek($values);
             $this->flashMessage('Zkouška byla přidána', 'info');
            $this->redirect('this');
        }

        protected function createComponentAddPesForm() {
            $form = new Form();
            $form->addGroup('zakl');
            $form->addText("clp", "ČLP*: ")
                ->setRequired('Vyplňte ČLP!');
            $form->addText("reg_c", "Reg.č.*: ")
                ->setRequired('Vyplňte Reg. č.!');
            $form->addText("jmeno", "Jméno*: ")
                ->setRequired('Vyplňte název formulare!');
            $sex = array('pes' => 'pes','fena' => 'fena');
            $form->addRadioList('pohl', 'Pohlaví*:', $sex)
            ->getSeparatorPrototype()->setName(NULL);
            $form->addText("datum_nar", "Datum narození*: ")
                ->setRequired('Vyplňte datum narození!');
            $form->addText("vyska", "Výška*: ")
                ->setRequired('Vyplňte výšku!');
            $form->addText("barva_oka", "Barva oka*: ")
                ->setRequired('Vyplňte barvu oka!');
            $form->addText("dkk", "Dkk: ");
            $form->addText("hd", "Hd: ");
            $form->addTextArea("chovatel", "Chovatel*: ");

            $form->addTextArea("majitel", "Majitel*: ");

            $form->addTextArea("vysledky_vystav", "Výsledky výstav: ");
            $form->addTextArea("poznamka", "Poznámka: ");

            $form->addGroup('Rodokmen');
            $form->addTextArea("otec");
            $form->addTextArea("otec_o");
            $form->addTextArea("otec_m");
            $form->addTextArea("otec_31");
            $form->addTextArea("otec_32");
            $form->addTextArea("otec_33");
            $form->addTextArea("otec_34");
            $form->addTextArea("otec_41");
            $form->addTextArea("otec_42");
            $form->addTextArea("otec_43");
            $form->addTextArea("otec_44");
            $form->addTextArea("otec_45");
            $form->addTextArea("otec_46");
            $form->addTextArea("otec_47");
            $form->addTextArea("otec_48");
            $form->addTextArea("matka");
            $form->addTextArea("matka_o");
            $form->addTextArea("matka_m");
            $form->addTextArea("matka_31");
            $form->addTextArea("matka_32");
            $form->addTextArea("matka_33");
            $form->addTextArea("matka_34");
            $form->addTextArea("matka_41");
            $form->addTextArea("matka_42");
            $form->addTextArea("matka_43");
            $form->addTextArea("matka_44");
            $form->addTextArea("matka_45");
            $form->addTextArea("matka_46");
            $form->addTextArea("matka_47");
            $form->addTextArea("matka_48");
            $form->addSubmit("send", "Odeslat");
            $form->onSuccess[] = $this->addPesFormSucceeded;

            return $form;
        }
 
        public function addPesFormSucceeded(Form $form) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = $form->getValues();
            if ($values->pohl == 'fena') {
                $values->fena = 1;
            } else { $values->fena = 0;}

            $values->vyrazen = 0;

           unset($values['pohl']);
            $this->psiModel->addPes($values);

            $this->flashMessage('Pes byl přidán', 'info');
            $this->redirect("Psi:list");
        }

        protected function createComponentAddPhotoForm() {
            $form = new Form();
            $form->addUpload('obr', 'Vyberte brázek:')
                                ->setRequired('Nevložili jste žádný obr')
                                ->addRule(Form::IMAGE, 'Obrázek musí být ve formátu JPEG, PNG nebo GIF.')
                                ->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 5 MB.', 5000 * 1024 /* v bytech */);
            $form->addTextArea('popis',"Popis obrázku:");   
            $form->addSubmit("send", "Odeslat");
            $form->onSuccess[] = $this->addPhotoFormSucceeded;
            return $form;
        }

        public function addPhotoFormSucceeded($form) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = $form->getValues();
            $pes = $this->psiModel->getPesById($this->getParam('id'));
            $values->id_psa = $pes->id;
             $file = $form['obr']->getValue();
            unset($values['obr']);

             if ($pes->fena) {
                    $cesta = '/images/Feny/'.$pes->jmeno;

                } else {
                    $cesta = '/images/Psi/'.$pes->jmeno;

                }
                $values->nazev = $file->getSanitizedName();
                $values->slozka = $cesta;
                $values->cesta = $cesta . '/' . $file->getSanitizedName();
                if (!is_dir(WWW_DIR . $cesta)) {
                                                mkdir(WWW_DIR . $cesta);
                                        }


            $this->fotkyModel->addFotka($values);
            $file->move(WWW_DIR . $values->cesta);
            $this->flashMessage('Fotka byla přidána', 'info');
            $this->redirect('this');
        }

        protected function createComponentEditPesForm() {
            $pes = $this->psiModel->getPesById($this->getParam('id'));
            $form = new Form();
            $form->addGroup('zakl');
            $form->addText("clp", "ČLP*: ")
                ->setRequired('Vyplňte ČLP!')->setDefaultValue($pes->clp);

            $form->addText("reg_c", "Reg.č.*: ")
                ->setRequired('Vyplňte Reg. č.!')->setDefaultValue($pes->reg_c);
            $form->addText("jmeno", "Jméno*: ")
                ->setRequired('Vyplňte název formulare!')->setDefaultValue($pes->jmeno);
            $sex = array('pes' => 'pes','fena' => 'fena');
            $form->addRadioList('pohl', 'Pohlaví*:', $sex)
            ->getSeparatorPrototype()->setName(NULL);
            $form->addText("datum_nar", "Datum narození*: ")
                ->setRequired('Vyplňte datum narození!')->setDefaultValue($pes->datum_nar);
            $form->addText("vyska", "Výška*: ")
                ->setRequired('Vyplňte výšku!')->setDefaultValue($pes->vyska);
            $form->addText("barva_oka", "Barva oka*: ")
                ->setRequired('Vyplňte barvu oka!')->setDefaultValue($pes->barva_oka);
            $form->addText("dkk", "Dkk: ")->setDefaultValue($pes->dkk);
            $form->addText("hd", "Hd: ")->setDefaultValue($pes->hd);
            $form->addTextArea("chovatel", "Chovatel*: ")->setDefaultValue($pes->chovatel)
                ->setRequired('Vyplňte chovatele!');

             $form->addTextArea("majitel", "Majitel*: ")->setDefaultValue($pes->majitel)
                ->setRequired('Vyplňte majitele!');
            $form->addTextArea("vysledky_vystav", "Výsledky výstav: ")->setDefaultValue($pes->vysledky_vystav);
            $form->addTextArea("poznamka", "Poznámka: ")->setDefaultValue($pes->poznamka);

            $form->addGroup('Rodokmen');
            $form->addTextArea("otec")->setDefaultValue($pes->otec);
            $form->addTextArea("otec_o")->setDefaultValue($pes->otec_o);
            $form->addTextArea("otec_m")->setDefaultValue($pes->otec_m);
            $form->addTextArea("otec_31")->setDefaultValue($pes->otec_31);
            $form->addTextArea("otec_32")->setDefaultValue($pes->otec_32);
            $form->addTextArea("otec_33")->setDefaultValue($pes->otec_33);
            $form->addTextArea("otec_34")->setDefaultValue($pes->otec_34);
            $form->addTextArea("otec_41")->setDefaultValue($pes->otec_41);
            $form->addTextArea("otec_42")->setDefaultValue($pes->otec_42);
            $form->addTextArea("otec_43")->setDefaultValue($pes->otec_43);
            $form->addTextArea("otec_44")->setDefaultValue($pes->otec_44);
            $form->addTextArea("otec_45")->setDefaultValue($pes->otec_45);
            $form->addTextArea("otec_46")->setDefaultValue($pes->otec_46);
            $form->addTextArea("otec_47")->setDefaultValue($pes->otec_47);
            $form->addTextArea("otec_48")->setDefaultValue($pes->otec_48);
            $form->addTextArea("matka")->setDefaultValue($pes->matka);
            $form->addTextArea("matka_o")->setDefaultValue($pes->matka_o);
            $form->addTextArea("matka_m")->setDefaultValue($pes->matka_m);
            $form->addTextArea("matka_31")->setDefaultValue($pes->matka_31);
            $form->addTextArea("matka_32")->setDefaultValue($pes->matka_32);
            $form->addTextArea("matka_33")->setDefaultValue($pes->matka_33);
            $form->addTextArea("matka_34")->setDefaultValue($pes->matka_34);
            $form->addTextArea("matka_41")->setDefaultValue($pes->matka_41);
            $form->addTextArea("matka_42")->setDefaultValue($pes->matka_42);
            $form->addTextArea("matka_43")->setDefaultValue($pes->matka_43);
            $form->addTextArea("matka_44")->setDefaultValue($pes->matka_44);
            $form->addTextArea("matka_45")->setDefaultValue($pes->matka_45);
            $form->addTextArea("matka_46")->setDefaultValue($pes->matka_46);
            $form->addTextArea("matka_47")->setDefaultValue($pes->matka_47);
            $form->addTextArea("matka_48")->setDefaultValue($pes->matka_48);

            $form->setDefaults(array('pohl' => $pes->fena==0?'pes':'fena'));

            $form->addHidden("id")
                ->setDefaultValue($this->getParam('id'));
            $form->addSubmit("send", "Odeslat");
            $form->onSuccess[] = $this->editPesFormSucceeded;

            return $form;
        }

        public function editPesFormSucceeded(Form $form) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = $form->getValues();
            if ($values->pohl == 'fena') {
                $values->fena = 1;
            } else { $values->fena = 0;}


            $values->vyrazen = 0;

           unset($values['pohl']);
            $this->psiModel->updatePes($values->id,$values);

            $this->flashMessage('Pes byl editován', 'info');
            $this->redirect("Psi:list");
        }

        public function handleDeleteFotka($id,$idPsa)
	{if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
               
		$photo = $this->fotkyModel->getFotkaById($id);
		@unlink(WWW_DIR . $photo->cesta );
		
		$this->fotkyModel->deleteFotka($id);
                $this->zrusitNahled($idPsa);
                $this->flashMessage('Fotka psa byla smazána', 'info');
		$this->redirect('Psi:foto', $idPsa);
	}
        
        public function handleDeleteZkouska($id,$idPsa)
	{if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
                $this->zkouskyModel->deleteVysledek($id);
                $this->flashMessage('Zkouška byla smazána', 'info');
		$this->redirect('Psi:editZkousky', $idPsa);
	}
        
        public function handleDeletePes($id)
	{if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            
            $fotky = $this->fotkyModel->getFotkyByPesId($id);
            $this->zrusitNahled($id);
            $pocet = count($fotky);
            $i=0;
            foreach ($fotky as $fotka){$i++; @unlink(WWW_DIR . $fotka->cesta ); 
             if ($i==$pocet) {rmdir(WWW_DIR . $fotka->slozka);} $this->fotkyModel->deleteFotka($fotka->id);}
             
            $zkousky = $this->zkouskyModel->getVysledkyByIdPsa($id);
            foreach ($zkousky as $zkouska){ $this->zkouskyModel->deleteVysledek($zkouska->id);}
		$this->psiModel->deletePes($id);
                $this->flashMessage('Pes byl smazán', 'info');
		$this->redirect('Psi:list');
	}
        
        public function handleVyradPsa($id) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = array('vyrazen' => 1);
            $this->psiModel->updatePes($id, $values);
            $this->flashMessage('Pes byl vyřazen', 'info');
            $this->redirect('Psi:list');
        }
        
        protected function createComponentEditTextForm() {
            $form = new Form();
            $str = $this->strankyModel->getStrankaByUrl($this->urlList);
            $form->addTextArea('text', 'Text:')->setDefaultValue($str->text);
            $form->addHidden('id')->setDefaultValue($str->id);
            $form->addSubmit("send", "Odeslat");
            $form->onSuccess[] = $this->editTextFormSucceeded;
            return $form;
        }

        public function editTextFormSucceeded(Form $form) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = $form->getValues();
            $this->strankyModel->updateStranka($values->id, $values);
            $this->flashMessage('Text byl editován', 'info');
            $this->redirect('Psi:list');
        }
        
        public function handleZrusVyrazeniPsa($id) {
            if (!$this->getUser()->isLoggedIn()) {
        $this->error('Pro vytvoření, nebo editování příspěvku se musíte přihlásit.');
    }
            $values = array('vyrazen' => 0);
            $this->psiModel->updatePes($id, $values);
            $this->flashMessage('Vyřazení bylo zrušeno', 'info');
            $this->redirect('Psi:list');
        }
        
        private function zrusitNahled($idPsa) {
            
            $photo = $this->fotkyModel->getNahledByPesId($idPsa);
            if ($photo != null) {
                $co = null;
            $values = array('maly_nahled' => $co, 'velky_nahled' => $co);
            @unlink(WWW_DIR . $photo->maly_nahled );
            @unlink(WWW_DIR . $photo->velky_nahled );
            $this->fotkyModel->updateFotka($photo->id,$values);
            $this->psiModel->updatePes($idPsa, $values);
            }
        }
        
        public function handleNahled($idFotka,$idPsa) {
            $this->zrusitNahled($idPsa);
            $photo = $this->fotkyModel->getFotkaById($idFotka);
            $malyNahledCesta = $photo->slozka . '/' . 'malyNahled' . $photo->nazev;
            $velkyNahledCesta = $photo->slozka . '/' . 'velkyNahled' . $photo->nazev;
            $image1 = Image::fromFile(WWW_DIR . $photo->cesta);
            $image1->resize(150, 110);
            
            $image1->save(WWW_DIR . $malyNahledCesta);
            $image2 = Image::fromFile(WWW_DIR . $photo->cesta);
            $image2->resize(350, 280);
            
            $image2->save(WWW_DIR . $velkyNahledCesta);
            $values = array('maly_nahled' => $malyNahledCesta, 'velky_nahled' => $velkyNahledCesta);
            
            $this->fotkyModel->updateFotka($photo->id,$values);
            $this->psiModel->updatePes($idPsa, $values);
            $this->flashMessage('Fotka byla nastavena jako náhled', 'info');
            $this->redirect('Psi:foto', $idPsa);
        }

    
}
