<?php

class Sistema_Model_VistoriadoresStatus extends Agro_Db_Table_Abstract
{
    const DS_CHAVE_CONFERIDO = 'CONFERIDO';
    const DS_CHAVE_NAO_CONFERIDO = 'NAO_CONFERIDO';
    const DS_CHAVE_PENDENTE = 'PENDENTE';

    const ID_STATUS_CONFERIDO = 278;
    const ID_STATUS_NAO_CONFERIDO = 279;
    const ID_STATUS_PENDENTE = 280;

    protected $_schema = 'sistema';
    protected $_name = 'vistoriadores_status';
    protected $_primary = 'id';

    public function getStatusVistoriador(int $idFuncionario, bool $somenteAtual = false)
    {
        $campos = [
            "to_char(svs.dt_criacao, 'DD/MM/YYYY HH24:MI:SS') as data_criacao",
            'svs.id_status',
            'ss.ds_status',
            'ss.ds_chave',
            'su.ds_nome_usuario',
            'svs.ds_observacao',
            'svs.fl_cadastro_inicial',
        ];

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['svs' => "{$this->_schema}.{$this->_name}"], $campos);
        $select->join(['ss' => 'sistema.status'], 'ss.id = svs.id_status', null);
        $select->join(['su' => 'sistema.usuarios'], 'su.id = svs.id_usuario_criacao', null);
        $select->where('svs.id_funcionario = ?', $idFuncionario);
        $select->order('svs.id desc');

        if ($somenteAtual) {

            $select->limit(1);
            $result = $this->fetchRow($select);
        } else {
            $result = $this->fetchAll($select);
        }

        return $result;
    }

    // Verifica se em algum momento o status já foi dado como CONFERIDO
    public function hasStatusConferido(int $idFuncionario, int $idVistoriadorStatusIgnorar = 0): bool
    {
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(['svs' => "{$this->_schema}.{$this->_name}"], ['svs.id_status']);
        $select->join(['ss' => 'sistema.status'], 'ss.id = svs.id_status', null);
        $select->join(['su' => 'sistema.usuarios'], 'su.id = svs.id_usuario_criacao', null);
        $select->where('svs.id_funcionario = ?', $idFuncionario);
        $select->where('svs.id_status = ?', self::ID_STATUS_CONFERIDO);
        $select->order('svs.id desc');
        $select->limit(1);

        if ($idVistoriadorStatusIgnorar) {
            $select->where('svs.id <> ?', $idVistoriadorStatusIgnorar);
        }

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

    public function getStatusVistoriadorByUsuario(int $idUsuario)
    {
        $campos = ['svs.id', 'svs.id_funcionario', 'svs.fl_cadastro_inicial', 'ss.ds_chave'];
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['svs' => "{$this->_schema}.{$this->_name}"], $campos);
        $select->join(['sf' => 'sistema.funcionarios'], 'sf.id = svs.id_funcionario', false);
        $select->join(['ss' => 'sistema.status'], 'ss.id = svs.id_status', false);
        $select->where('sf.id_usuario = ?', $idUsuario);
        $select->order('svs.id desc');

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

    public function save(array $data)
    {
        $row = $this->createRow();

        $row->id_funcionario = $data['id_funcionario'];
        $row->id_status = $data['id_status'];
        $row->ds_observacao = $data['ds_observacao'];

        if (array_key_exists('fl_cadastro_inicial', $data)) {
            $row->fl_cadastro_inicial = $data['fl_cadastro_inicial'];
        }

        return $row->save();
    }
}
