<?php

class Produto_Model_GestaoComissaoUsuarios extends Agro_Db_Table_Abstract
{
    protected $_schema = 'produto';
    protected $_name = 'gestao_comissao_usuarios';
    protected $_primary = 'id';

    public function deleteByGestaoComissao(int $idGestaoComissao)
    {
        parent::delete($idGestaoComissao, "id_gestao_comissao");
    }

    public function save(array $dados)
    {
        $row = $this->getRow($dados['id']);
        $row->id_gestao_comissao = !empty($dados['id_gestao_comissao']) ? $dados['id_gestao_comissao'] : $row->id_gestao_comissao;
        $row->id_usuario = !empty($dados['id_usuario']) ? $dados['id_usuario'] : $row->id_usuario;
        $row->save();

        return $row;
    }

    /**
     * Retorna uma coleção com os dados (id_usuario, nome, id_corretor) dos usuários que estão vinculados com a gestão de comissão informada
     *
     * @param int $idGestaoComissao
     * @return array
     */
    public function getIdUsuarios(int $idGestaoComissao): array
    {
        $campos = "
            json_agg(
                json_build_object(
                    'id_usuario', gcu.id_usuario,
                    'nome', COALESCE(p.ds_nome_preposto, c.ds_nome_corretor),
                    'id_corretor', COALESCE(p.id_corretor, c.id)
                )
                ORDER BY COALESCE(p.ds_nome_preposto, c.ds_nome_corretor)
            ) AS usuarios
        ";
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['gcu' => "{$this->_schema}.{$this->_name}"], $campos);
        $select->joinLeft(['c' => 'sistema.corretores'], 'c.id_usuario = gcu.id_usuario', false);
        $select->joinLeft(['p' => 'sistema.prepostos'], 'p.id_usuario = gcu.id_usuario', false);
        $select->where("id_gestao_comissao = ?", $idGestaoComissao);
        $rs = $this->_db->query($select)->fetch();

        return !empty($rs['usuarios']) ? json_decode($rs['usuarios'], true) : []; 
    }
}
