<?php namespace App\Models;

use App\Entities\Perfil\Perfil;
use App\Entities\Usuario\Usuario;
use App\Entities\UsuarioPerfil\UsuarioPerfil;
use CodeIgniter\Model;

class UsuarioPerfilModel extends ModelEntity
{
    protected $table = 'usuario_perfil';
    protected $primaryKey = 'id';
    protected $returnType = 'array';
    protected $allowedFields = [
        'id_usuario',
        'id_perfil',
    ];
    protected $useSoftDeletes = false;
    protected $useTimestamps = false;
    protected $skipValidation = true;

    public function registerUsuarioPerfil(UsuarioPerfil &$usuario_perfil) : void {
        $usuario_perfil_data = $usuario_perfil->toArray();
        unset($usuario_perfil_data['id']);
        $id_new_usuario_perfil = $this->insert($usuario_perfil_data);
        $usuario_perfil->setId($id_new_usuario_perfil);
    }

    public function updatePerfilByAssistenteID (int $id_assistente, UsuarioPerfil $usuario) : bool {
        $data = $usuario->toArray(true);
        if (count($data) > 0) {
            $binds = ['id_assistente' => $id_assistente];
            $sql = "
                update 
                usuario_perfil
                inner join usuario on usuario.id = usuario_perfil.id_usuario
                inner join pessoa on pessoa.id = usuario.id_pessoa
                inner join profissional on profissional.id_pessoa = pessoa.id
                inner join assistente on profissional.id = assistente.id_profissional
            ";
            $sql .= $this->generateUpdateSets($data, $binds);
            $sql .= 'WHERE assistente.id = :id_assistente:';
            $query = $this->db->query($sql, $binds);
            $errors = $this->errors();
            return !$errors;
        } else {
            return true;
        }
    }
}
