<?php

class SiteController extends Controller {

	public function actions() {
		return array(
			'captcha'    => array(
				'class'     => 'CCaptchaAction',
				'backColor' => 0xFFFFFF,
			),
			'page'   => array(
				'class' => 'CViewAction',
			),
		);
	}

	public function actionPendentesMenu() {
		$data = [];

		if (User::getUser()->FUN_TBL_INTERESSADOS) {
			$data['interessados'] = $this->interessados();
		}
		if (User::getUser()->FUN_SOLICITACOES_CANCELAMENTO) {
			$data['cancelamentos'] = $this->cancelamentos();
		}
		if (User::getUser()->FUN_SOLICITACOES_TRANSFERENCIA) {
			$data['transferencias'] = $this->transferencias();
		}
		if (User::getUser()->FUN_TBL_COBRANCA_ATENDIMENTO_SUPORTE) {
			$data['atendimentos'] = $this->atendimentos();
		}

		echo json_encode($data);
		Yii::app()->end();	
	}

	private function interessados() {
        $criteria = new CDbCriteria;
        $lastId = 0;
        if(isset($_POST['lastId'])) {
            $lastId  = $_POST['lastId'];
        }
        if (User::isRevenda()) {
            $criteria->addInCondition('INT_CIDADE', array_keys(User::getCidades()));
        }

        if (User::isVendedor()) {
            $criteria->addCondition('INT_IDVENDEDOR = "'.User::getId().'"');
        }
        $criteria->order = 'INT_CODIGO DESC';
        $lastCadastrado  = Interessados::model()->find($criteria);
        if (isset($lastCadastrado->INT_CODIGO)) {
            $lastId = $lastCadastrado->INT_CODIGO;
        }

        $criteria->addCondition('INT_PROSPECTO_DESDE is null');
        $pendentes = Interessados::model()->count($criteria);

        $criteria->addCondition('INT_VENDEDOR_NOTIFICADO is null');
        $criteria->addCondition('INT_IDVENDEDOR = "'.User::getId().'"');
        $novosPendentes = Interessados::model()->count($criteria);
        $updateNovos    = Interessados::model()->findAll($criteria);
        foreach ($updateNovos as $interessado) {
            $interessado->INT_VENDEDOR_NOTIFICADO = 1;
            $interessado->save(false, array('INT_VENDEDOR_NOTIFICADO'));
        }

        return array('pendentes' => $pendentes, 'lastId' => $lastId, 'novosPendentes' => $novosPendentes);
    }

    public function cancelamentos()
    {
        $criteria = new CDbCriteria;

        if (User::isVendedor()) {
            $criteria->addCondition('CLC_IDVENDEDOR = "'.User::getId().'"');
        } else {
            $criteria->addCondition('Cliente.CLI_CIDADE IN ('.User::getCidades(true).')');
        }

        $status = array();
        if (!in_array(User::getPrivilegio(), [16, 19])) {
            $status[] = ClientesCancelamentos::STATUS_AGUARDANDO;
            if (in_array(User::getPrivilegio(), [6, 7, 11]) || User::getUser()->FUN_PRM_EXCECOES == 1) {
                $status[] = ClientesCancelamentos::STATUS_AGUARDANDO_APROVACAO;
            }
        } else {
            $status[] = ClientesCancelamentos::STATUS_PROCESSADO;
        }

        $criteria->addInCondition('CLC_STATUS', $status);

        $criteria->with = array(
            'Cliente' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        );

        $pendentes = ClientesCancelamentos::model()->count($criteria);

        return array('pendentes' => $pendentes);
    }

    public function transferencias()
    {
        $criteria = new CDbCriteria;

        if (User::isVendedor()) {
            $criteria->addCondition('CLT_IDVENDEDOR = "'.User::getId().'"');
        } else {
            $criteria->addCondition('
                (
                    Cliente.CLI_CIDADE IN ('.User::getCidades(true).') OR
                    ClienteAutorizado.CLI_CIDADE IN ('.User::getCidades(true).')
                )
            ');
        }

        $status = array();
        if (!in_array(User::getPrivilegio(), [16, 19])) {
            $status[] = ClientesTransferencias::STATUS_AGUARDANDO;
            $status[] = ClientesTransferencias::STATUS_AGUARDANDO_VINCULO;
        } else {
            $status[] = ClientesTransferencias::STATUS_PROCESSADO;
        }

        $criteria->addInCondition('CLT_STATUS', $status);

        $criteria->with = array(
            'Cliente' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => 'CLI_CIDADE'),
            'ClienteAutorizado' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => 'CLI_CIDADE'),
        );

        $pendentes = ClientesTransferencias::model()->count($criteria);

        return array('pendentes' => $pendentes);
    }

    public function atendimentos()
    {
        $criteria = new CDbCriteria;
        if (User::isVendedor()) {
            $userId = User::getId();
            $criteria->addCondition("ATD_IDFUNCIONARIO = {$userId}");
        }
        $criteria->addCondition('ATD_COBRAR_ATENDIMENTO = 1');
        $criteria->addCondition('ATD_STATUS_COBRANCA = 3');
        $aguardando = Atendimentos::model()->count($criteria);

        return array('aguardando' => $aguardando);
    }

	public function actionIndex() {
		if (Yii::app()->user->isGuest) {
			$this->render('login');
		} else {
			$this->render('index');
		}
	}

	public function actionMenu() {
		if (!Yii::app()->user->isGuest) {
			$layout = '//layouts/menu';
			$this->render('menu');
		}
	}

	public function actionTopo() {
		if (!Yii::app()->user->isGuest) {
			$layout = '//layouts/topo';
			$this->render('topo');
		}
	}

	public function actionMain() {
		if (User::getUser(true)) {
			$layout = '//layouts/main';
			$this->render('main');
		}
	}

	public function actionError() {
		if ($error = Yii::app()->errorHandler->error) {
			if(!YII_DEBUG) {
				$corpo = '<p><b>Data:</b> '.date('d/m/Y H:i:s').'</p>';
				if (!Yii::app()->user->isGuest) {
					$corpo .= '<p><b>Usuário:</b> '.User::getName().' - '.User::getUser()->FUN_USUARIO.' - '.User::getUser()->FUN_EMAIL.'</p>';
				}
				if (isset($_SERVER['HTTP_USER_AGENT'])) {
					$corpo .= '<p><b>User Agent:</b> '.$_SERVER['HTTP_USER_AGENT'].'</p>';
				}

				if (isset($_SERVER['REMOTE_ADDR'])) {
					$corpo .= '<p><b>IP:</b> '.$_SERVER['REMOTE_ADDR'].'</p>';
				}

				$corpo .= '<p><b>Código:</b> '.$error['code'].'</p>';
				$corpo .= '<p><b>Tipo:</b> '.$error['type'].'</p>';
				$corpo .= '<p><b>Mensagem:</b> '.$error['message'].'</p>';
				$corpo .= '<p><b>Arquivo:</b> '.$error['file'].' : '.$error['line'].'</p>';
				$corpo .= '<p><b>Link:</b> https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'</p>';
				$corpo .= '<p><b>Pilha de chamadas do erro:</b> </p><p><pre>'.nl2br($error['trace']).'</pre></p>';
				$info = array();
				if ($_SERVER['REQUEST_METHOD'] == 'POST') {
					$info = $_POST;
				} else if ($_SERVER['REQUEST_METHOD'] == 'GET') {
					$info = $_GET;
				}

				$corpo .= '<table cellpadding="10">';
				$corpo .= json_encode($info);
				$corpo .= '</table>';
				$base = $_SERVER['HTTP_HOST'];
				Util::sendEmail('marcio@delvale.com.br', 'Erro no CRM versão '.VERSAO.' ('.$base.') '.date('d/m/Y H:i:s'), $corpo);
			}

			if (Yii::app()->request->isAjaxRequest) {
				echo $error['message'];
			} else {
				$this->render('error', $error);
			}
		}
	}

	public function actionLogin() {
		$model = new LoginForm;
		if (isset($_POST['LoginForm'])) {
			$model->attributes = $_POST['LoginForm'];
			if ($model->validate() && $model->login()) {
				$this->redirect('index.php');
			} else {
				Yii::app()->user->setFlash('error', 'Usu&aacute;rio e/ou Senha Inv&aacute;lido(s)');
			}
		}
		$this->render('login', array('model' => $model));
	}

	public function actionLogout() {
		Yii::app()->user->logout();
		Yii::app()->session->clear();
		Yii::app()->session->destroy();
		$this->redirect(Yii::app()->homeUrl);
	}

	public function actionCache() {
		if (User::getUser(true)) {
			if(!User::isAdmin()) {
				die;
			}
			if (isset($_POST['clearCache'])) {
				Yii::app()->cache->flush();
				Yii::app()->user->setFlash('success', 'Cache de todos usuários apagado');
			} else if(isset($_POST['reloadSchema'])) {
				Yii::app()->db->schema->getTables();
				Yii::app()->db->schema->refresh();
				Yii::app()->user->setFlash('success', 'Schema da base de dados recarregado');
			} else if(isset($_POST['clearAssets'])) {
				$dir = realpath(YII_BASE.DS."assets");
		        $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
		        $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
		        $fileNames = $folderNames = array();
		        foreach($files as $file) {
		            if ($file->getFilename() === '.' || $file->getFilename() === '..') {
		                continue;
		            }
		            if ($file->isLink()) {
		            	$folderNames[] = $file->getFilename();
		                unlink($file->getPathName());
		            } else if ($file->isDir()){
		            	$folderNames[] = $file->getFilename();
		                rmdir($file->getRealPath());
		            } else {
		            	$fileNames[] = $file->getFilename();
		                unlink($file->getRealPath());
		            }
		        }
		        $message = "Pasta de Assets limpa!<br />";
		        $message .= "<b>Arquivos deletados</b>: ".count($fileNames);
		        if(!empty($fileNames)) {
		        	$message .= "<br />-".implode('<br />- ', $fileNames);
		        } else {
		        	$message .= "<br />";
		        }
		        $message .= "<b>Pastas deletadas</b>: ".count($folderNames);
		        if(!empty($folderNames)) {
		        	$message .= "<br />-".implode('<br />- ', $folderNames);
		        }
				Yii::app()->user->setFlash('success', $message);
			} else if(isset($_POST['clearArquivosTmp'])) {
				$dir = realpath(YII_BASE.DS."arquivos". DS .'tmp');
		        $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
		        $files = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
		        $fileNames = $folderNames = array();
		        foreach($files as $file) {
		            if ($file->getFilename() === '.' || $file->getFilename() === '..' || $file->getFilename() === '.htaccess') {
		                continue;
		            }
		            if ($file->isLink()) {
		            	$folderNames[] = $file->getFilename();
		                unlink($file->getRealPath());
		            } else if ($file->isDir()){
		            	$folderNames[] = $file->getFilename();
		                rmdir($file->getRealPath());
		            } else {
		            	$fileNames[] = $file->getFilename();
		                unlink($file->getRealPath());
		            }
		        }
		        $message = "Pasta temporária de arquivos limpa!<br />";
		        $message .= "<b>Arquivos deletados</b>: ".count($fileNames);
		        if(!empty($fileNames)) {
		        	$message .= "<br />-".implode('<br />- ', $fileNames);
		        } else {
		        	$message .= "<br />";
		        }
		        $message .= "<b>Pastas deletadas</b>: ".count($folderNames);
		        if(!empty($folderNames)) {
		        	$message .= "<br />-".implode('<br />- ', $folderNames);
		        }
				Yii::app()->user->setFlash('success', $message);
			}
			$this->render('cache');
		}
	}
}
