<?php declare(strict_types=1);

class Produto_Model_ProdutoConfig extends Agro_Db_Table_Abstract
{
    protected $_schema = 'produto';
	protected $_name = 'produto_config';
	protected $_primary = 'id';

    public function save(array $dados): int
    {
        $this->_db->query("
            UPDATE produto.produto_config
            SET fl_ativo = FALSE
            WHERE id_produto = {$dados['id_produto']}
                AND dt_inicio_validade = '{$dados['dt_inicio_validade']}'
                AND fl_ativo IS TRUE
        ");

        $row = $this->createRow();

        $row->id_produto = $dados['id_produto'];
        $row->ds_url_condicoes = $dados['ds_url_condicoes'];
        $row->ds_frase_restricoes = $dados['ds_frase_restricoes'];
        $row->ds_frase_risco = $dados['ds_frase_risco'];
        $row->ds_frase_padrao_orcamento = $dados['ds_frase_padrao_orcamento'];
        $row->id_modelo_vistoria_previa = $dados['id_modelo_vistoria_previa'] == 0 ? null : $dados['id_modelo_vistoria_previa'];
        $row->dt_inicio_validade = $dados['dt_inicio_validade'];

        return $row->save();
    }

    public function findByIdProduto(int $idProduto)
    {
        return $this->fetchRow(['id_produto' => $idProduto, 'fl_ativo' => true]);
    }

    public function getConfiguracaoByData(int $idProduto, DateTime $dateTime): ?Zend_Db_Table_Row
    {
        $row = $this->fetchRow(
            $this->select()
                ->from(
                    ['produto_config' => 'produto.produto_config'],
                    'MAX(id) AS id'
                )
                ->where('dt_inicio_validade <= ?', $dateTime->format('Y-m-d'))
                ->where('id_produto = ?', $idProduto)
                ->where('fl_ativo IS TRUE')
        );
        
        return $this->fetchRow(
            $this->select()
                ->where('id = ?', $row['id'])
        ) ?? null;
    }

    public function getConfiguracaoByDataCorte(int $idProduto, DateTime $data): ?Zend_Db_Table_Row
    {
        $query = $this->select()
            ->from(
                ['produto_config' => 'produto.produto_config'],
                'MAX(dt_inicio_validade) AS dt_inicio_validade, id'
            )
            ->where('id_produto = ?', $idProduto)
            ->where('dt_inicio_validade = ?', $data->format('Y-m-d'))
            ->where('fl_ativo IS TRUE')
            ->group('id')
            ->order('id DESC')
            ->limit(1);
        
        $row = $this->fetchRow($query);

        if (empty($row)) {
            return null;
        }

        $row = $this->fetchRow(
            $this->select()
                ->from(['produto_config' => 'produto.produto_config'])
                ->where('id = ?', $row['id'])
        );

        return $row;
    }

}
