<?php

class Sistema_Model_PrepostosPeriodoCadastroAnual extends Agro_Db_Table_Abstract
{
    protected $_schema = 'sistema';
    protected $_primary = 'id';
    protected $_name = 'prepostos_periodo_cadastro_anual';

    public function getByPreposto(int $idPreposto, string $data = '', bool $cadastroValidado = null)
    {
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(["{$this->_schema}.{$this->_name}"], '*');
        $select->where('id_preposto = ?', $idPreposto);

        if (!empty($data)) {
            $select->where('dt_inicio <= ?', $data);
            $select->where('dt_fim >= ?', $data);
        }

        if ($cadastroValidado !== null) {
            $select->where('fl_cadastro_validado = ?', $cadastroValidado ? 'true' : 'false');
        }

        $select->order('dt_fim desc');

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

    public function save(array $data)
    {
        if (empty($data['id']) && !empty($data['id_preposto'])) {
            $row = $this->getByPreposto($data['id_preposto'], date('Y-m-d'));
        }

        if (empty($row)) {
            $row = $this->getRow($data['id']);
        }

        $row->id_preposto = $data['id_preposto'] ?? $row->id_preposto;
        $row->dt_inicio = $data['dt_inicio'] ?? $row->dt_inicio;
        $row->dt_fim = $data['dt_fim'] ?? $row->dt_fim;

        if (isset($data['fl_cadastro_validado'])) {
            $row->fl_cadastro_validado = $data['fl_cadastro_validado'] ? 'true' : 'false';
        }

        $row->save();
    }

    public function getPrepostosByCorretor(int $idCorretor, string $data = '', bool $cadastroValidado = null)
    {
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(['ppca' => "{$this->_schema}.{$this->_name}"], '*');
        $select->join(['p' => 'sistema.prepostos'], 'p.id = ppca.id_preposto');
        $select->where('p.id_corretor = ?', $idCorretor);

        if ($cadastroValidado !== null) {
            $select->where('ppca.fl_cadastro_validado = ?', $cadastroValidado ? 'true' : 'false');
        }

        if (!empty($data)) {
            $select->where('dt_inicio <= ?', $data);
            $select->where('dt_fim >= ?', $data);
        }

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

    public function validarCadastro(string $idsPreposto, bool $cadastroValidado = true)
    {
        $this->_db->update(
          "{$this->_schema}.{$this->_name}",
          ['fl_cadastro_validado' => $cadastroValidado],
          "id_preposto in({$idsPreposto})"
        );
    }

    public function salvarSublogins(array $registroCorretorCadastroAnual, Sistema_Model_Corretores $modelCorretores)
    {
        $rows = $modelCorretores->getPrepostos($registroCorretorCadastroAnual['id_corretor'])->toArray();

        foreach ($rows as $preposto) {
            $this->save([
                'id_preposto' => $preposto['id'],
                'dt_inicio' => $registroCorretorCadastroAnual['dt_inicio'],
                'dt_fim' => $registroCorretorCadastroAnual['dt_fim'],
            ]);
        }
    }
}
