<?php

namespace backend\controllers;

use Yii;
use common\models\Ugiro;
use backend\models\UgiroSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use common\components\DetStatProcessor;
use backend\models\DestaUploadForm;
use yii\web\UploadedFile;
use yii\data\ArrayDataProvider;
use yii\db\Query;
use yii\data\ActiveDataProvider;
use common\models\MessageDetsta;

/**
 * UgiroController implements the CRUD actions for Ugiro model.
 * TODO: FIX ACCESS
 */
class UgiroController extends Controller {
	public function behaviors() {
		return [ 
				'verbs' => [ 
						'class' => VerbFilter::className (),
						'actions' => [ 
								'delete' => [ 
										'post' 
								] 
						] 
				],
				'access' => [ 
						'class' => \yii\filters\AccessControl::className (),
						'rules' => [
								// allow authenticated users
								[ 
										'actions' => [ ],
										'allow' => true,
										'roles' => [ 
												'admin',
												'employee',
												'reception' 
										] 
								] 
						] 
				]
				// everything else is denied
				
				 
		];
	}
	
	/**
	 * Lists all Ugiro models.
	 * 
	 * @return mixed
	 */
	public function actionIndex() {
		$searchModel = new UgiroSearch ();
		$dataProvider = $searchModel->search ( Yii::$app->request->queryParams );
		
		return $this->render ( 'index', [ 
				'searchModel' => $searchModel,
				'dataProvider' => $dataProvider 
		] );
	}
	/**
	 * Lists all Ugiro models.
	 * 
	 * @return mixed
	 */
	public function actionItems($id) {
		$searchModel = new UgiroSearch ();
		$dataProvider = $searchModel->search ( Yii::$app->request->queryParams );
		
		return $this->render ( 'index', [ 
				'searchModel' => $searchModel,
				'dataProvider' => $dataProvider 
		] );
	}
	public function actionActivate() {
	}
	
	/**
	 * Displays a single Ugiro model.
	 * 
	 * @param integer $id        	
	 * @return mixed
	 */
	public function actionView($id) {
		$model = $this->findModel ( $id );
		if (Yii::$app->request->isPost) {
			if ($model->status == Ugiro::$STATUS_RECIEVED) {
				set_time_limit ( 1200 ); // 20 perc
				$processor = new DetStatProcessor ( [ 
						'koteg' => $model 
				] );
				$processor->run ();
				$this->redirect(['view', 'id' => $model->id_ugiro]);
			} else {
				\Yii::$app->session->setFlash ( 'danger', 'Nem lehet futtatni a fájlt' );
				\Yii::error ( "a koteg státusza nem STATUS_RECIEVED. A koteg azonosíótja:" . $model->id_ugiro );
			}
		} else {
			if (isset ( $_GET ['output'] )) {
				$output = $_GET ['output'];
				
				if ($output == 'pdf') {
					$this->downloadUgiro ( $model );
				}
			}
		}
		
		$query = MessageDetsta::find();
		$query->andWhere(['id_ugiro' => $model->id_ugiro]);
		$query->orderBy([ 'created_at' => SORT_ASC ]);
		
		$detstaDp = new ActiveDataProvider([
			'query' => $query,
			'pagination' => false,
			'sort' => false
		]);
		
		return $this->render ( 'view', [ 
				'model' => $this->findModel ( $id ) ,
				'detstaDp' => $detstaDp
		] );
	}
	protected function downloadUgiro($model) {
	
// 		$mpdf = new \mPDF ( 'utf-8', 'A4' );
		$mpdf = new \mPDF ( 'utf-8', 'A4-L' );
		$fn = "köteg.". $model->id_ugiro . ".pdf";
			
		$mpdf->useSubstitutions = false;
		$mpdf->simpleTables = true;
		$mpdf->SetHeader ( "" );
		$mpdf->setFooter ( '{PAGENO} / {nb}' );
		
		$query = new Query();
		$query->select([
			'customer.id_customer as customer_id_customer',
			'customer.name as customer_name',
			'customer.bank_account as customer_bank_account',
			'ticket_installment_request.money as request_money',
			'ticket_installment_request.request_target_time_at as request_request_target_time_at',
		]);
		$query->from('ticket_installment_request');
		$query->innerJoin('ugiro_request_assignment','ticket_installment_request.id_ticket_installment_request = ugiro_request_assignment.id_request');
		$query->innerJoin('customer','customer.id_customer = ticket_installment_request.id_customer');
		$query->andWhere(['ugiro_request_assignment.id_ugiro' => $model->id_ugiro]);
		$dataProvider = new ActiveDataProvider(
				[
					'query' => $query, 
					'sort' => false,
					'pagination' => false
				]
				);
			
		$stylesheet = file_get_contents ( \Yii::getAlias ( '@vendor' . '/bower/bootstrap/dist/css/bootstrap.css' ) ); // external css
		$mpdf->WriteHTML ( $stylesheet, 1 );
			
		$mpdf->WriteHTML ( $this->renderPartial ( '_view_pdf.php', [
				'model' => $model,
				'dataProvider' => $dataProvider
		] ) );
		$mpdf->Output ( $fn, 'D' );
		exit ();
		
	}
	
	/**
	 * Creates a new Ugiro model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 * 
	 * @return mixed
	 */
	public function actionCreate() {
		$model = new Ugiro ();
		
		if ($model->load ( Yii::$app->request->post () ) && $model->save ()) {
			return $this->redirect ( [ 
					'view',
					'id' => $model->id_ugiro 
			] );
		} else {
			return $this->render ( 'create', [ 
					'model' => $model 
			] );
		}
	}
	
	/**
	 * Updates an existing Ugiro model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * 
	 * @param integer $id        	
	 * @return mixed
	 */
	public function actionUpdate($id) {
		$model = $this->findModel ( $id );
		
		if ($model->load ( Yii::$app->request->post () ) && $model->save ()) {
			return $this->redirect ( [ 
					'view',
					'id' => $model->id_ugiro 
			] );
		} else {
			return $this->render ( 'update', [ 
					'model' => $model 
			] );
		}
	}
	
	/**
	 * Deletes an existing Ugiro model.
	 * If deletion is successful, the browser will be redirected to the 'index' page.
	 * 
	 * @param integer $id        	
	 * @return mixed
	 */
	public function actionDelete($id) {
		$this->findModel ( $id )->delete ();
		
		return $this->redirect ( [ 
				'index' 
		] );
	}
	public function actionDetsta() {
		$ugiro = Ugiro::findOne ( 31 );
		$model = new DetStatProcessor ( [ 
				'koteg' => $ugiro 
		] );
		
		return $this->render ( 'detsta', [ 
				'model' => $model 
		] );
	}
	public function actionUpload() {
		$model = new DestaUploadForm ();
		
		if (Yii::$app->request->isPost) {
			$model->destaFile = UploadedFile::getInstance ( $model, 'destaFile' );
			if ($model->upload ()) {
				// file is uploaded successfully
				return $this->redirect ( [ 
						'view',
						'id' => $model->koteg->id_ugiro 
				] );
			}
		}
		
		return $this->render ( 'upload', [ 
				'model' => $model 
		] );
	}
	public function actionGenerateDetsta() {
	}
	
	/**
	 * Finds the Ugiro model based on its primary key value.
	 * If the model is not found, a 404 HTTP exception will be thrown.
	 * 
	 * @param integer $id        	
	 * @return Ugiro the loaded model
	 * @throws NotFoundHttpException if the model cannot be found
	 */
	protected function findModel($id) {
		if (($model = Ugiro::findOne ( $id )) !== null) {
			return $model;
		} else {
			throw new NotFoundHttpException ( 'The requested page does not exist.' );
		}
	}
}
