<?php

declare(strict_types=1);

class Sistema_Model_ParametrosAgronomosResponsaveis extends Agro_Db_Table_Abstract
{
	public $_order = 'id_funcionario';
	protected $_schema = 'sinistro';
	protected $_name = 'parametros_agronomos_responsaveis';
	protected $_primary = 'id';
	protected $_rowClass = 'Sistema_Model_Row_ParametrosAgronomosResponsaveis';

	public function save(array $dados): Sistema_Model_Row_ParametrosAgronomosResponsaveis
    {
        $row = $this->getRow($dados['id']);
        
        $row->id_funcionario = $dados['id_funcionario'] ?? $row->id_funcionario;
        $row->id_estado = $dados['id_estado'] ?? $row->id_estado;

        $row->save();

        return $row;
    }

    public function getParametrosByEstadoCultura(int $idEstado, int $idCultura): Zend_Db_Table_Rowset
    {
        $query = $this->select()
            ->setIntegrityCheck(false)
            ->from(['par' => 'sinistro.parametros_agronomos_responsaveis'], '')
            ->join(
                ['parc' => 'sinistro.parametros_agronomos_responsaveis_culturas'],
                'parc.id_parametro_agronomo_responsavel = par.id',
                '')
            ->join(
                ['f' => 'sistema.funcionarios'],
                'f.id = par.id_funcionario',
                'f.ds_nome_funcionario')
            ->where('par.id_estado = ?', $idEstado)
            ->where('parc.id_cultura = ?', $idCultura);
        
        return $this->fetchAll($query);
    }

    public function delete($id, $field = ''): int
    {
        $adapter = $this->getDefaultAdapter();

        $adapter->query("
            DELETE FROM sinistro.parametros_agronomos_responsaveis_culturas 
            WHERE id_parametro_agronomo_responsavel = $id
        ");
        
        $pdo = $adapter->query("DELETE FROM {$this->_schema}.{$this->_name} WHERE id = $id");

        return $pdo->rowCount();
    }

    public function fetchAllPaginator($where, $pageNumber=false, $itemCountPerPage = 10, $paginator='')
    {
        $query = $this->select()
            ->setIntegrityCheck(false)
            ->from(
                ['par' => 'sinistro.parametros_agronomos_responsaveis'],
                'id, id_funcionario, id_estado')
            ->join(
                ['parc' => 'sinistro.parametros_agronomos_responsaveis_culturas'],
                'parc.id_parametro_agronomo_responsavel = par.id',
                '')
            ->join(
                ['c' => 'produto.culturas'],
                'c.id = parc.id_cultura',
                "string_agg(ds_nome_cultura, ', ') as culturas"
            )
            ->group(['par.id', 'par.id_funcionario', 'par.id_estado']);

        $this->getWhere($query, $where);
        
        return $this->getPaginator($query, $pageNumber, $itemCountPerPage, $paginator);
    }
}