<?php
/**
 * Classe padrão para envio de emails
 */
class Agro_Utils_Mail extends Zend_Mail{
	/**
	 * Constroi a classe e configura informações globais
	 */
	public function __construct() {
		parent::__construct();

		$this->_charset = "UTF-8";

		parent::setFrom("ti@agrobrasilseguros.com.br", "AgroNet 2.0 - Sistema de notificação");

		$config = array(
			'ssl' => MAIL_SSL,
			'port' => MAIL_PORT,
			'auth' => MAIL_AUTH,
			'username' => MAIL_USERNAME,
			'password' => MAIL_PASSWORD
		);

		$transport = new Zend_Mail_Transport_Smtp(MAIL_SMTP, $config);

		parent::setDefaultTransport($transport);
	}

	public function send() {
		if (APPLICATION_ENV != 'production') {
			$this->addTo('tonismar.bernardo@agrobrasilseguros.com.br', 'Tonismar R. Bernardo');
		}
		parent::send();
	}

	/**
	 * Envia email para os desenvolvedores do sistema quando ocorre um exception
	 * @param type $erro: Mensagem de erro que será anexada ao email
	 * @param type $copiarUsuario: Flag que sinaliza se o usuário deve ser copiado no email
	 */
	public function informaErroAgronet($erro, $copiarUsuario = false) {
		try {
			$ModelEmpresas = new Sistema_Model_Empresas();

			$AgroBrasil = $ModelEmpresas->fetchRow("cpf_cnpj='03.486.745/0001-09'");

			$Ti = $AgroBrasil->departamentos("TI");
			$Programadores = $Ti->funcionarios();

			$User = Zend_Auth::getInstance()->getIdentity();

			$Date = new Zend_Date();

			$Request = Zend_Controller_Action::getRequest()->getParams();

			$post = array();

			foreach ($Request as $key => $value) {
				if (!in_array($key, array("module", "controller", "action"))) {
					$post[] = "<b>$key</b> = $value";
				}
			}

			$message = '
					<html>
						<head>
							<title>Agronet 2.0 - Sistema de notificações</title>
						</head>
						<body>
							<h2>Prezados desenvolvedores,</h2>
							<p style="width: 600px;">Foi detectado um erro no sistema. Por favor verifique e responda ao usuário o mais breve possível. <br/>A seguir, informações sobre o ocorrido:</p>

							<h3>Dados do usuário</h3>
							<p>
								<ul>
									<li><b>Usuário: </b>' . $User->ds_nome_usuario . '</li>
									<li><b>Empresa: </b>' . $User->ds_nome_fantasia . '</li>
									<li><b>Data/hora: </b>' . $Date->get("dd/MM/yyy HH:mm:ss") . '</li>
								</ul>
							</p>

							<h3>Dados do sistema</h3>
							<p>
								<ul>
									<li><b>Module: </b>' . $Request["module"] . '</li>
									<li><b>Controller: </b>' . $Request["controller"] . '</li>
									<li><b>action: </b>' . $Request["action"] . '</li>
									<li>
										<b>Post/Get</b>
										<ul>
											<li>' . implode('</li><li>', $post) . '</li>
										</ul>
									</li>
								</ul>
							</p>

							<h3>Exception e/ou mensagem</h3>
							<p style="width: 600px">
								' . $erro . '
							<p>
						</body>
					</html>
				';

			$this->setFrom("ti@agrobrasilseguros.com.br", "AgroNet 2.0 - Sistema de notificação");

			$this->setSubject("AgroNet 2.0 - ERRO NO SISTEMA");

			$Responsavel = $Ti->responsavel();
			$this->addTo($Responsavel["ds_email"], $Responsavel["ds_nome_funcionario"]);

			/*
			foreach ($Programadores as $Funcionario) {
				if ($Funcionario["id"] != $Responsavel["id"]) {
					if ($Funcionario["ds_email"]) {
						$this->addCc($Funcionario["ds_email"], $Funcionario["ds_nome_funcionario"]);
					}
				}
			}
			*/

			if ($copiarUsuario) {
				//$this->addCc($User->ds_email, $User->ds_nome_funcionario);
			}

			$this->setBodyHtml($message);

			$this->send();

		} catch (Exception $e) {
			throw new Exception($e->getMessage(), $e->getCode(), $e->getPrevious());
		}
	}

	public function comunicaRecusaAviso($AvisoRecusa, $Proposta, $cancelamento=false){

		try {
			$View = Zend_Layout::getMvcInstance()->getView();
			$View->corretor = $Proposta->corretor();
			$View->aviso_recusa = $AvisoRecusa;
			$View->data_recusa = new Zend_Date($AvisoRecusa->dt_criacao);
			$View->motivo = $AvisoRecusa->ds_motivo_recusa;
			$View->id_proposta = $Proposta->id_proposta_mae($Proposta->id);
			$View->nr_apolice = $Proposta->nr_apolice;

			$AvisoEvento       = new Sinistro_Model_AvisosEventos();
			$listAvisosEventos = $AvisoEvento->getAvisosEventos($AvisoRecusa['id_aviso']);
			$View->evento      = $listAvisosEventos[0]['ds_nome_evento'];

			$TipoRecusa = new Atendimento_Model_TipoRecusaSinistro();
			$tipo = $TipoRecusa->fetchRow("id=$AvisoRecusa->id_tipo_recusa");
			$View->tipo_recusa = $tipo->ds_tipo_recusa; 

			$this->setBodyHtml($View->render("mail/avisorecusado.phtml"), "utf-8");

			if (APPLICATION_ENV == 'production') {
				$this->addTo("tiago.zschornack@agrobrasilseguros.com.br", "Tiago Zschornack");
				$this->addCc("marcia.correa@agrobrasilseguros.com.br", "Marcia Correa");
				$this->addCc("tatiana.tondim@agrobrasilseguros.com.br", "Tatiana Tondim");
				$this->addCc("tamara.ramos@agrobrasilseguros.com.br", "Tamara Ramos");
				$this->addCc("grace.nascimento@agrobrasilseguros.com.br", "Grace Nascimento");
			}

			$this->setSubject("Aviso de Sinistro n° $AvisoRecusa->id_aviso RECUSADO");

			return $this->send();

		} catch (Exception $e) {
			$this->informaErroAgronet($e->getMessage());
		}
	}

	public function comunicaCancelamentoAviso($AvisoCancelado, $Proposta, $id_tipo_recusa){
	    
		try {
			$View = Zend_Layout::getMvcInstance()->getView();
			$View->corretor = $Proposta->corretor();
			$View->aviso_cancelado = $AvisoCancelado;
			$View->data_cancelado = new Zend_Date($AvisoCancelado->dt_criacao);
			$View->id_proposta = $Proposta->id_proposta_mae($Proposta->id);
			$View->nr_apolice = $Proposta->nr_apolice;
			
			$AvisoEvento       = new Sinistro_Model_AvisosEventos();
			$listAvisosEventos = $AvisoEvento->getAvisosEventos($AvisoCancelado['id_aviso']);
			$View->evento      = $listAvisosEventos[0]['ds_nome_evento'];
			
			$TipoRecusa = new Atendimento_Model_TipoRecusaSinistro();
			$tipo = $TipoRecusa->fetchRow("id=$id_tipo_recusa");
			$View->tipo_cancelamento = $tipo->ds_tipo_recusa;
			
			$this->setBodyHtml($View->render("mail/avisocancelado.phtml"), "utf-8");

			if (APPLICATION_ENV == 'production') {
				$this->addTo("tiago.zschornack@agrobrasilseguros.com.br", "Tiago Zschornack");
				$this->addCc("marcia.correa@agrobrasilseguros.com.br", "Marcia Correa");
			} else {
			    $this->addTo("ti@agrobrasilseguros.com.br");
			}

			$this->setSubject("Aviso de Sinistro n° $AvisoCancelado->id_aviso CANCELADO");

			return $this->send();

		} catch (Exception $e) {
			$this->informaErroAgronet($e->getMessage());
		}
	}

}
