<?php

class Produto_Model_ValidacoesInicioCobertura extends Agro_Db_Table_Abstract
{
    protected $_schema = 'produto';
    protected $_name = 'validacoes_inicio_cobertura';
    protected $_primary = 'id';
    public $_order = 'id';

    public function delete($id, $field = 'id')
    {
        (new Produto_Model_ValidacoesInicioCoberturaMunicipios())->delete($id, 'id_validacao_inicio_cobertura');
        
        return parent::delete($id, $field); // TODO: Change the autogenerated stub
    }

    public function getData($where = false)
    {
        $campos = [
            'pvic.id',
            'pvic.ds_nome as nome_validacao',
            'pc.ds_nome_cultura as nome_cultura',
            'ptvic.ds_descricao as tipo_validacao',
            'pvic.ds_descricao',
            'pvic.fl_ativo',
        ];

        $select = $this->select()->distinct(true)->setIntegrityCheck(false);
        $select->from(['pvic' => "{$this->_schema}.{$this->_name}"], $campos);
        $select->join(['pc' => 'produto.culturas'], 'pc.id = pvic.id_cultura', false);
        $select->join(['ptvic' => 'produto.tipos_validacoes_inicio_cobertura'], 'ptvic.id = pvic.id_tipo_validacao', false);

        if (is_array($where)) {
            foreach ($where as $clause) {
                if (is_array($clause)) {
                    $field = $clause['field'];
                    $operator = $clause['operator'];
                    $value = $clause['value'];

                    if ($operator === 'in') {
                        $select->where("$field $operator $value");
                    } else {
                        $select->where("$field $operator ?", $value);
                    }
                } else {
                    $select->where($clause, '');
                }
            }
        } elseif ($where != '') {
            $select->where($where);
        }

        if ($this->_order) {
            $select->order($this->_order);
        }

        return $select;
    }

    public function getMunicipiosVinculadosOutrasValidacoes(int $idValidacao, int $idCultura)
    {
        $campos = ['pvicm.id_municipio'];
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['pvic' => "{$this->_schema}.{$this->_name}"], $campos);
        $select->join(['pvicm' => 'produto.validacoes_inicio_cobertura_municipios'], 'pvicm.id_validacao_inicio_cobertura = pvic.id', false);
        $select->where('pvic.id <> ?', $idValidacao);
        $select->where('pvic.id_cultura = ?', $idCultura);

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

    public function save(array $dados)
    {
        $row = $this->getRow($dados['id']);
        $row->ds_nome = trim($dados['ds_nome']);
        $row->id_cultura = $dados['id_cultura'];
        $row->id_tipo_validacao = $dados['id_tipo_validacao'];

        if (array_key_exists('ds_descricao', $dados)) {
            $row->ds_descricao = trim($dados['ds_descricao']);
        }

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

        $row->save();

        return $row;
    }
}
