<?php

class Seguro_Model_PropostasCotacaoAgritask extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'propostas_cotacao_agritask';
	protected $_primary = 'id_proposta';
	public $_order = 'id_proposta';
    
    const FILE_PATH =  APPLICATION_PATH . '/upload_files/agritask';

    public function save(array $dados) : int {
        $Row = $this->createRow();
        $Row->id_proposta = $dados['id_proposta'];
        $Row->id_cotacao = $dados['id_cotacao'];
        $Row->vl_premio_10 = $dados['vl_premio_10'];
        $Row->vl_premio_20 = $dados['vl_premio_20'];
        $Row->vl_premio_30 = $dados['vl_premio_30'];
        $Row->ds_codigo_segurado = $dados['ds_codigo_segurado'];
        $Row->ds_codigo_item = $dados['ds_codigo_item'];
        
        return $Row->save();
    }

    public function getPropostaByCotacao(string $cotacao) :? array {
        $select = $this->select()->setIntegrityCheck(false)
            ->from(array('ca' => 'seguro.propostas_cotacao_agritask'), 'id_proposta')
            ->where("id_cotacao = '$cotacao'"); 

        return $this->fetchAll($select)->toArray();
    }

    /**
     * Retorna o número da cotação gerado pela agritask pela proposta informada por parâmetro.
     * 
     * @param int $id_proposta
     * @return int|null
     */
    public function getCotacaoByProposta(int $id_proposta) :? string {
        $select = $this->select()->setIntegrityCheck(false)
            ->from(array('ca' => 'seguro.propostas_cotacao_agritask'), 'id_cotacao')
            ->where('id_proposta = ?', $id_proposta);
            
        return $this->fetchRow($select)->id_cotacao;
    }

    /**
     * Retorna um label para apresentar para o corretor de acordo com o tipo do arquivo
     * 
     * @param string $nomeArquivo
     * @param int $indice
     * 
     * @return string
     */
    public function getLabelArquivo(string $nomeArquivo, int $indice): string
    {
        $tipo = explode("_", $nomeArquivo)[2];
			
        switch ($tipo) {
            case '01':
                $numero = $indice + 1;
                $labelArquivo = "{$numero}° Relatório de Monitoramento Mensal";
                break;
            
            case '02':
                $labelArquivo = 'Indenização Simulada - Cenário Histórico';
                break;
            
            case '03':
                $labelArquivo = 'Laudo Final - Apuração dos Prejuízos';
                break;
            
            default:
                $labelArquivo = $nomeArquivo;
                break;
        }

        return $labelArquivo;
    }

    /**
     * Gera o nome de arquivo no padrão que a agritask envia pelo ftp.
     * Exemplos:
     *   id cotacao_tipo_01_yyyymmdd --> Relatório de Monitoramento Mensal
     *   id cotacao_tipo_02_yyyymmdd --> Indenização Simulada - Cenário Histórico
     *   id cotacao_tipo_03_yyyymmdd --> Laudo Final: Apuração dos Prejuízos
     * 
     * @param int $idProposta
     * @param int $tipo
     * @param string $dataRecebimento (dd/mm/yyyy)
     * @return string
     */
    public function gerarNomeArquivo(int $idProposta, int $tipo, string $dataRecebimento): string
    {
        $idCotacao = $this->getCotacaoByProposta($idProposta);
        if (empty($idCotacao)) {
            throw new Exception("Nenhuma cotação encontrada para a proposta informada.");
        }

        $dataFormatada = Agro_Util::formatDate($dataRecebimento, 'yyyyMMdd');
        return "{$idCotacao}_tipo_0{$tipo}_{$dataFormatada}.pdf";
    }
}
