<?php

namespace console\controllers;

use Yii;
use yii\base\ErrorException;
use yii\console\Controller;
// use common\models\Cinema;
use console\models\Cinema;
use console\models\Film;
use console\models\Programmazione;
use common\models\Voucher;

class CommandsController extends Controller {

    private $apiKey = 'wIaNL3AC1U07mPK4';

    public function actionIndex() {

        echo "\n\nBye!\n";

        return 0;
    }

    public function actionCheckvouchers() {
        $dateStart = date("Y-m-d") . " 00:00:00";
        $dateEnd = date("Y-m-d") . " 23:59:59";

        $vouchers = Voucher::find()->where(['>=', 'data_creazione', $dateStart])->andWhere(['<=', 'data_creazione', $dateEnd])->count();

        echo date('Y-m-d H:i:s')." Checkvouchers: $vouchers \n";

        if ($vouchers <= 10){
            \console\extensions\Mailer::inviaAlertVouchersMail($vouchers, 'help.prime@devtime.it');
        }
        
    }

    public function actionImportcinema() {
        $prog = simplexml_load_file('http://contentws.computime4it.com/rest/api/v1/movieteathers/programming/my?apikey='.$this->apiKey);

        $actualCinemas = Cinema::find()->all();
        
        foreach ($prog->CONTENT_MOVIE_THEATERS->REFERENCES->REFERENCE as $cinema) {

            // echo $cinema->REFERENCE_ID."\n";

            $cinemaModel = $this->getCinema($actualCinemas, $cinema->REFERENCE_ID);

            

            if ($cinemaModel == NULL) {  // NEW CINEMA
                $cinemaModel = new Cinema();
                $cinemaModel->codice = (string) $cinema->REFERENCE_ID;
                $cinemaModel->ctel = "0"; //(string) $cinema['ctel'];
            }


            $cinemaModel->nome = (string) $cinema->REFERENCE_NAME;
            $cinemaModel->visione = (string) $cinema->REFERENCE_CATEGORIES->REFERENCE_CATEGORY;
            $cinemaModel->quartiere = (string) $cinema->REFERENCE_ADDRESS->ADDRESS_LOCALITY;
            $cinemaModel->indirizzo = (string) $cinema->REFERENCE_ADDRESS->ADDRESS_STREET_NAME;
            $cinemaModel->regione = (string) $cinema->REFERENCE_TOWN->TOWN_REGION_NAME;
            $cinemaModel->provincia = (string) $cinema->REFERENCE_TOWN->TOWN_PROVINCE_NAME;
                // $cinemaModel->codice_provincia = (string) $cinema->REFERENCE_TOWN->TOWN_PROVINCE_CODE;
            $cinemaModel->citta = (string) $cinema->REFERENCE_TOWN->TOWN_NAME;
            $cinemaModel->telefono = (string) $cinema->REFERENCE_TELEPHONES->REFERENCE_TELEPHONE;
            $cinemaModel->url = (string) $cinema->REFERENCE_URLS->REFERENCE_URL->URL_VALUE;

            $cinemaModel->latitudine = (string) $cinema->REFERENCE_GEOCODING->GEOC_Y;
            $cinemaModel->longitudine = (string) $cinema->REFERENCE_GEOCODING->GEOC_X;

            if (isset($cinema->REFERENCE_ATTRIBUTES)) {
                foreach ($cinema->REFERENCE_ATTRIBUTES->ATTRIBUTE as $attr) {

                    if ($attr->ATTRIBUTE_NAME == 'Servizio bar')
                        $cinemaModel->bar = (string) $attr->ATTRIBUTE_VALUE;

                    if ($attr->ATTRIBUTE_NAME == 'Servizio disabili')
                        $cinemaModel->serv_dis = (string) $attr->ATTRIBUTE_VALUE;

                        // if ($attr->ATTRIBUTE_NAME == 'Servizio bar')
                        //     $cinemaModel->pren_tel = (string) $attr->ATTRIBUTE_VALUE;
                    $cinemaModel->pren_tel = NULL;

                }
            }

            if (!$cinemaModel->save()) {
                echo "\n\n".$cinemaModel->codice."\n";
                print_r($cinemaModel->getErrors());
                // die('');
            }



        }




        echo "\n\nBye!\n";

        return 0;
    }


    public function actionImportfilm() {

        echo "\n\n".date('Y-m-d H:i:s')."\n";


        $data = http_build_query(array('apikey' => $this->apiKey, 'date' => date('d-m-Y')));
        $prog = simplexml_load_file('http://contentws.computime4it.com/rest/api/v1/movieteathers/programming/my?'.$data);
        // $prog = simplexml_load_file('http://contentws.computime4it.com/rest/api/v1/movieteathers/programming/my?apikey='.$this->apiKey);

        // Film::deleteAll();
        // Programmazione::deleteAll();

        Yii::$app->db->createCommand()->truncateTable('film')->execute();
        Yii::$app->db->createCommand()->truncateTable('programmazione')->execute();


        $i=0;
        foreach ($prog->CONTENT_MOVIE_THEATERS->MOVIES->MOVIE as $f) {

            // var_dump($f->MOVIE_CAST); 
            // var_dump($f->MOVIE_MEDIA); 
            // exit;


            if ((int)$f->MOVIE_ID <= 0)
                continue;


            $film = new Film();
            $film->codice = (string) $f->MOVIE_ID;
            $film->genere = (string) $f->MOVIE_TYPE;
            $film->titolo = (string) $f->MOVIE_TITLE;
            $film->anno = (string) $f->MOVIE_YEAR;
            $film->durata = (string) $f->MOVIE_DURATION;
            $film->trama = (string) $f->MOVIE_FULL_TEXT;

            $film->immagine = NULL;


            $regia = [];
            $cast = [];
            if (isset($f->MOVIE_CAST)) {
                foreach ($f->MOVIE_CAST->CAST as $c) {

                    if ($c->CAST_NAME == 'Regista')
                        $regia[] = (string) $c->CAST_VALUE;

                    if ($c->CAST_NAME == 'Attore')
                        $cast[] = (string) $c->CAST_VALUE;

                    $film->regia = implode(', ',$regia);
                    $film->cast = implode(', ',$cast);
                }
            }

            $film->immagine = NULL;
            $url_immagine = NULL;

            if (isset($f->MOVIE_MEDIA)) {
                foreach ($f->MOVIE_MEDIA->MEDIA as $m) {
                    if ($m->MEDIA_TYPE == 'Locandina') {
                        $url_immagine = (string) $m->MEDIA_URL;
                        $film->immagine = end(explode('/', $url_immagine));
                    }
                }
            }

            // if (!$url_immagine)
            //     continue;

            if ($film->save()) {
                $i++;
                if ($url_immagine != NULL && !file_exists(Yii::getAlias("@frontend/web/voucher/locandine/".$film->immagine))) {
                    try {
                        if (!copy($url_immagine.'?apikey='.$this->apiKey,Yii::getAlias("@frontend/web/voucher/locandine/".$film->immagine))){
                            // error downloading locandina
                            echo "error downloading locandina $filename";
                        }
                    } catch (ErrorException $e) {
                        // error downloading locandina
                        echo "error downloading locandina".$e->getMessage()."\n\n";
                    }
                    
                }
            } else {
                print_r($film->getErrors());
                die('');
            }

        }

        echo "$i films inserted!\n";

        $this->actionImportschedule($prog);
        return 0;

    }
    public function actionImportschedule($prog) {
        // $prog = simplexml_load_file('http://contentws.computime4it.com/rest/api/v1/movieteathers/programming/my?apikey='.$this->apiKey);

        // var_dump($prog->CONTENT_MOVIE_THEATERS->SCHEDULES->SCHEDULE[0]); exit;


        $i = 0;
        foreach ($prog->CONTENT_MOVIE_THEATERS->SCHEDULES->SCHEDULE as $s) {

            $p = new Programmazione();
            $p->schedule = (string) $s->SCHEDULE_ID; 
            $p->cinema = (string) $s->SCHEDULE_REFERENCE_ID;
            $p->film = (string) $s->SCHEDULE_MOVIE_ID;

            $programs = [];
            if (isset($s->SCHEDULE_PROGRAMS)) {
                foreach ($s->SCHEDULE_PROGRAMS->PROGRAM as $sp) {
                    $programs[] = (string) $sp->PROGRAM_TIME;
                }
            }

            $p->spettacoli = json_encode($programs);

            if (!$p->save()) {
                print_r($p->getErrors());
                die('');
            }
            $i++;

        }

        echo "$i schedules inserted!\n";
        echo "Bye!\n";
        return 0;
    }




    public function actionTest() {

        $prog = simplexml_load_file('http://contentws.computime4it.com/rest/api/v1/movieteathers/programming/my?apikey='.$this->apiKey);

        var_dump($prog->CONTENT_MOVIE_THEATERS->SCHEDULES->SCHEDULE[0]); exit;
        // empty all
        // Cinema::deleteAll();
        // Programmazione::deleteAll();

        $actualCinemas = Cinema::find()->all();
        $actualSalas = Sala::find()->all();

        foreach ($prog->REGIONE as $regione) {
            $nomeRegione = (string) $regione->NOME;
            foreach ($regione->PROV as $prov) {
                $nomeProvincia = (string) $prov->NOME;
                foreach ($prov->CITTA as $citta) {
                    $nomeCitta = (string) $citta->NOME;
                    foreach ($citta->CINEMA as $cinema) {
                        $codice = (string) $cinema['codice'];

                        $cinemaModel = $this->getCinema($actualCinemas, $codice);

                        if ($cinemaModel == NULL) {
                            $cinemaModel = new Cinema();
                            $cinemaModel->codice = $codice;
                            $cinemaModel->ctel = (string) $cinema['ctel'];
                            $cinemaModel->nome = (string) $cinema->NOME;
                            $cinemaModel->visione = (string) $cinema->VISIONE;
                            $cinemaModel->quartiere = (string) $cinema->QUARTIERE;
                            $cinemaModel->indirizzo = (string) $cinema->INDIRIZZO;
                            $cinemaModel->regione = $nomeRegione;
                            $cinemaModel->provincia = $nomeProvincia;
                            $cinemaModel->citta = $nomeCitta;
                            $cinemaModel->telefono = (string) $cinema->TELEFONO;
                            $cinemaModel->bar = (string) $cinema->BAR;
                            $cinemaModel->serv_dis = (string) $cinema->SERV_DIS;
                            $cinemaModel->url = (string) $cinema->URL;
                            $cinemaModel->pren_tel = (string) $cinema->PREN_TEL;

                            if (!$cinemaModel->save()) {
                                print_r($cinemaModel->getErrors());
                                die('');
                            }
                        }

                        foreach ($cinema->SALA as $sala) {
                            $codiceSala = (string) $sala['codice'];

                            $salaModel = getSala($actualSalas, $codiceSala);
                            if ($salaModel === NULL) {
                                $salaModel = new Sala();
                                $salaModel->id_cinema = $cinemaModel->id;
                                $salaModel->progressivo = (string) $sala['progressivo'];
                                $salaModel->codice = $codiceSala;
                                $salaModel->ctel = (string) $sala['ctel'];
                                $salaModel->nome = (string) $sala->NOME;
                                $salaModel->posti = (string) $sala->POSTI;
                                $salaModel->dimensione = (string) $sala->DIMENSIONE;
                                $salaModel->suono = (string) $sala->SUONO;
                                $salaModel->disabili = (string) $sala->DISABILI;
                                $salaModel->audiolesi = (string) $sala->AUDIOLESI;
                                $salaModel->aria = (string) $sala->ARIA;

                                if (!$salaModel->save()) {
                                    print_r($salaModel->getErrors());
                                    die('');
                                }
                            }

                            foreach ($sala->PROGRAMMAZIONE as $p) {
                                $spettArray = array();
                                foreach ($p->SPETTACOLO as $spett) {
                                    $spettArray[] = array('ora' => (string) $spett->ORA, 'prezzo' => (string) $spett->PREZZO);
                                }

                                $spettacoliJSON = json_encode($spettArray);


                                $progModel = new Programmazione();
                                $progModel->id_sala = $salaModel->id;
                                $progModel->id_cinema = $cinemaModel->id;
                                $progModel->variato = (string) $p->VARIATO;
                                $progModel->codice_film = (string) $p->FILM['cod'];
                                $progModel->ctel_film = (string) $p->FILM['ctel'];
                                $progModel->riduzioni = (string) $p->RIDUZIONI;
                                $progModel->spettacoli = $spettacoliJSON;

                                if (!$progModel->save()) {
                                    print_r($progModel->getErrors());
                                    die('');
                                }
                            }
                        }
                    }
                }
            }
        }

        echo "<br/><br/>CINEMA IMPORTED<br/>";

        // import film

        $film_xml = file_get_contents(Yii::getAlias("@webroot/resources/20160218_F.xml"));

        $filmprog = simplexml_load_string($film_xml);

        // empty all
        Film::deleteAll();

        foreach ($filmprog->FILM as $film) {
            $codice = (string) $film['cod'];
            $ctel = (string) $film['ctel'];
            $trailer = (string) $film['trailer'];

            $titolo = (string) $film->TITOLO;
            $vm = (string) $film->VM;
            $regia = (string) $film->REGIA;
            $cast = (string) $film->CAST;
            $anno = (string) $film->ANNO;
            $colore = (string) $film->COLORE;
            $tit_orig = (string) $film->TIT_ORIG;
            $durata = (string) $film->DURATA;
            $nazione = (string) $film->NAZIONE;
            $distributore = (string) $film->DISTRIBUTORE;
            $giudizio = (string) $film->GIUDIZIO;
            $genere = (string) $film->GENERE;
            $trama = (string) $film->TRAMA;

            $immagine = null;
            $immagineAltezza = null;
            $immagineTipo = null;
            if (isset($film->IMMAGINE)) {
                $immagine = (string) $film->IMMAGINE['nome'];
                $immagineAltezza = (string) $film->IMMAGINE['altezza'];
                $immagineTipo = (string) $film->IMMAGINE['tipo'];
            }

            $filmModel = new Film();
            $filmModel->codice = $codice;
            $filmModel->ctel = $ctel;
            $filmModel->trailer = $trailer;
            $filmModel->titolo = $titolo;
            $filmModel->vm = $vm;
            $filmModel->regia = $regia;
            $filmModel->cast = $cast;
            $filmModel->anno = $anno;
            $filmModel->colore = $colore;
            $filmModel->tit_orig = $tit_orig;
            $filmModel->durata = $durata;
            $filmModel->nazione = $nazione;
            $filmModel->distributore = $distributore;
            $filmModel->giudizio = $giudizio;
            $filmModel->genere = $genere;
            $filmModel->trama = $trama;
            $filmModel->immagine = $immagine;
            $filmModel->immagine_altezza = $immagineAltezza;
            $filmModel->immagine_tipo = $immagineTipo;

            if (!$filmModel->save()) {
                print_r($filmModel->getErrors());
                die('');
            }
        }

        echo "<br/><br/>FILM IMPORTED<br/>";

        Yii::$app->end();


        echo "\n\nTest Bye!\n";

        return 0;
    }


    private function getCinema($cinemas, $codice) {
        foreach ($cinemas as $c) {
            if ($c->codice == $codice) {
                return $c;
            }
        }
        return null;
    }

    private function getSala($salas, $codice) {
        foreach ($salas as $c) {
            if ($c->codice == $codice) {
                return $c;
            }
        }
        return null;
    }


}
