<?php

class Endosso_Model_TiposSolicitacao extends Agro_Db_Table_Abstract
{
    const DS_CHAVE_ALTERACAO_APOLICE = 'ALTERACAO_APOLICE';
    const DS_CHAVE_ALTERACAO_CLAUSULA_BENEFICIARIA = 'ALTERACAO_CLAUSULA_BENEFICIARIA';
    const DS_CHAVE_ALTERACAO_ITENS_SEM_MOVIMENTO = 'ALTERACAO_ITENS_SEM_MOVIMENTO';
    const DS_CHAVE_ALTERACAO_LMGA = 'ALTERACAO_LMGA';
    const DS_CHAVE_CANCELAMENTO = 'CANCELAMENTO';
    const DS_CHAVE_CANCELAMENTO_APOLICE = 'CANCELAMENTO_APOLICE';
    const DS_CHAVE_COM_MOVIMENTO_PREMIO = 'COM_MOVIMENTO_PREMIO';
    const DS_CHAVE_CORRECAO_COORDENADAS = 'CORRECAO_COORDENADAS';
    const DS_CHAVE_CORRECAO_PROPRIEDADE = 'CORRECAO_PROPRIEDADE';
    const DS_CHAVE_CORRECAO_SEGURADO = 'CORRECAO_SEGURADO';
    const DS_CHAVE_MODIFICACAO_COBERTURAS_ADICIONAIS = 'MODIFICACAO_COBERTURAS_ADICIONAIS';
    const DS_CHAVE_MODIFICACAO_OBSERVACOES = 'MODIFICACAO_OBSERVACOES';
    const DS_CHAVE_SEM_MOVIMENTO_PREMIO = 'SEM_MOVIMENTO_PREMIO';

    const ID_ALTERACAO_CLAUSULA_BENEFICIARIA = 10;
    const ID_ALTERACAO_ITENS_SEM_MOVIMENTO = 5;
    const ID_ALTERACAO_LMGA = 8;
    const ID_CANCELAMENTO = 6;
    const ID_CANCELAMENTO_APOLICE = 12;
    const ID_COM_MOVIMENTO_PREMIO = 13;
    const ID_CORRECAO_COORDENADAS = 4;
    const ID_CORRECAO_PROPRIEDADE = 2;
    const ID_CORRECAO_SEGURADO = 1;
    const ID_MODIFICACAO_COBERTURAS_ADICIONAIS = 11;
    const ID_MODIFICACAO_OBSERVACOES = 3;
    const ID_SEM_MOVIMENTO_PREMIO = 14;
    const ID_STATUS_ALTERACAO_APOLICE = 15;

    protected $_name = 'endosso_tipo_solicitacao';
    protected $_schema = 'seguro';
    protected $_primary = 'id';
    public    $_order = 'ds_tipo_endosso';

    public function save(array $data) {
        try {
            $Row = $this->getRow($data['id']);
            $Row->ds_tipo_endosso = $data['ds_tipo_endosso'];
            $Row->ds_orientacao = $data['ds_orientacao'];
            $Row->ds_chave = $data['ds_chave'];
            $Row->id_usuario_responsavel = $data['id_usuario_responsavel'];

            return $Row->save();

        } catch (Exception $e) {
            $this->setMessage($e->getMessage());
            return false;
        }
    }
    
    public function getCombo($primeiraOpcaoVazia = true, $somenteAtivos = true) {
    	$where = $somenteAtivos ? 'fl_ativo is true and fl_del = false' : 'fl_del = false';
    	$Rs = $this->fetchAll($where, 'ds_tipo_endosso');
    	
    	if($Rs->count()) {
    		
    		$options = $primeiraOpcaoVazia ? [''] : [];
    		
    		foreach($Rs as $row) {
    			$options[$row['id']] = $row['ds_tipo_endosso'];
    		}

    		return $options;
    	} else { 
    		return array();
    	}
    }

    public function getUsuarioResponsavelTipoSolicitacao(
        int $idTipoSolicitacao,
        array $campos = ['*']
    ): ?Zend_Db_Table_Row_Abstract
    {
        $select = $this->select()
            ->setIntegrityCheck(false)
            ->from(['sets' => "{$this->_schema}.{$this->_name}"], $campos)
            ->join(['su' => 'sistema.usuarios'], 'su.id = sets.id_usuario_responsavel', [])
            ->where('sets.id = ?', $idTipoSolicitacao);

        return $this->fetchRow($select);
    }

    public static function getTipoByChave(string $dsChave)
    {
        $tiposEndosso = [
          self::DS_CHAVE_ALTERACAO_CLAUSULA_BENEFICIARIA => 'Inclusão/Alteração/Exclusão de Cláusula Beneficiária',
          self::DS_CHAVE_ALTERACAO_ITENS_SEM_MOVIMENTO => 'Alteração nos itens segurados SEM mudança do LMGA total',
          self::DS_CHAVE_ALTERACAO_LMGA => 'Alteração nos itens segurados COM mudança do LMGA total',
          self::DS_CHAVE_CANCELAMENTO => 'Cancelamento',
          self::DS_CHAVE_CANCELAMENTO_APOLICE => 'Cancelamento de Apólice',
          self::DS_CHAVE_COM_MOVIMENTO_PREMIO => 'Alteração de Apólice - Com Movimento de Prêmio/LMGA',
          self::DS_CHAVE_CORRECAO_COORDENADAS => 'Correção coordenadas geográficas',
          self::DS_CHAVE_CORRECAO_PROPRIEDADE => 'Correção de dados da propriedade',
          self::DS_CHAVE_CORRECAO_SEGURADO => 'Correção de dados do segurado',
          self::DS_CHAVE_MODIFICACAO_COBERTURAS_ADICIONAIS => 'Inclusão/Exclusão de Coberturas Adicionais',
          self::DS_CHAVE_MODIFICACAO_OBSERVACOES => 'Inclusão/Alteração/Exclusão de Observações',
          self::DS_CHAVE_SEM_MOVIMENTO_PREMIO => 'Alteração de Apólice - Sem Movimento de Prêmio/LMGA',
          self::DS_CHAVE_ALTERACAO_APOLICE => 'Alteração de Apólice',
        ];

        return $tiposEndosso[$dsChave];
    }

    public static function getChaveById(int $idTipoSolicitacao) : string
    {
        $tiposSolicitacao = [
            self::ID_CANCELAMENTO_APOLICE => self::DS_CHAVE_CANCELAMENTO_APOLICE,
            self::ID_COM_MOVIMENTO_PREMIO => self::DS_CHAVE_COM_MOVIMENTO_PREMIO,
            self::ID_SEM_MOVIMENTO_PREMIO => self::DS_CHAVE_SEM_MOVIMENTO_PREMIO,
            self::ID_ALTERACAO_CLAUSULA_BENEFICIARIA => self::DS_CHAVE_ALTERACAO_CLAUSULA_BENEFICIARIA,
            self::ID_ALTERACAO_ITENS_SEM_MOVIMENTO => self::DS_CHAVE_ALTERACAO_ITENS_SEM_MOVIMENTO,
            self::ID_ALTERACAO_LMGA => self::DS_CHAVE_ALTERACAO_LMGA,
            self::ID_CANCELAMENTO => self::DS_CHAVE_CANCELAMENTO,
            self::ID_CORRECAO_COORDENADAS => self::DS_CHAVE_CORRECAO_COORDENADAS,
            self::ID_CORRECAO_PROPRIEDADE => self::DS_CHAVE_CORRECAO_PROPRIEDADE,
            self::ID_CORRECAO_SEGURADO => self::DS_CHAVE_CORRECAO_SEGURADO,
            self::ID_MODIFICACAO_COBERTURAS_ADICIONAIS => self::DS_CHAVE_MODIFICACAO_COBERTURAS_ADICIONAIS,
            self::ID_MODIFICACAO_OBSERVACOES => self::DS_CHAVE_MODIFICACAO_OBSERVACOES,
            self::ID_STATUS_ALTERACAO_APOLICE => self::DS_CHAVE_ALTERACAO_APOLICE,
        ];

        return $tiposSolicitacao[$idTipoSolicitacao];
    }
}
