<?php


namespace App\Models;


use App\Entities\RespostaFormulario\RespostaFormulario;
use App\Entities\RespostaNumericaDecimal\RespostaNumericaDecimal;
use App\Utils\Collections\GeneralCollection;

class RespostaNumericaDecimalModel extends ModelEntity
{
    protected $table = 'resposta_numerica_decimal';
    protected $primaryKey = 'id';
    protected $returnType = 'array';
    protected $allowedFields = [
        'id_resposta_formulario',
        'resposta',
    ];
    protected $useSoftDeletes = false;
    protected $skipValidation = true;
    protected $useTimestamps = false;


    public function registerRespostaNumericaDecimalCollection (GeneralCollection $resposta_numerica_decimal_collection): bool {
        if ($resposta_numerica_decimal_collection->length === 0) {
            return true;
        }
        $sql = 'insert into resposta_numerica_decimal (
                    `id_resposta_formulario`,
                    `resposta`
                ) values ();
        ';
        $values = $resposta_numerica_decimal_collection->map(function (RespostaNumericaDecimal $resposta_numerica_decimal) : string {
            return "(
                {$resposta_numerica_decimal->getIdRESPOSTAFORMULARIO()},   
                {$resposta_numerica_decimal->getResposta()}   
            )";
        })->join(',');
        $sql = str_replace('VALUES ()', "VALUES $values;", $sql);
        $query = $this->db->query($sql);
        return $query->connID->affected_rows === $resposta_numerica_decimal_collection->length;
    }

    public function updateRespostaNumericaDecimalCollection (RespostaNumericaDecimal $resposta_numerica_decimal_collection, int $id_resposta_formulario): bool {
        $data = $resposta_numerica_decimal_collection->toArray(true);
        if (count($data) > 0) {
            $binds = ['id_resposta_formulario' => $id_resposta_formulario];
            $sql = "
                update resposta_numerica_decimal
            ";
            $sql .= $this->generateUpdateSets($data, $binds);
            $sql .= 'where resposta_numerica_decimal.id_resposta_formulario = :id_resposta_formulario:';
            $query = $this->db->query($sql, $binds);
            $errors = $this->errors();
            return !$errors;
        } else {
            return true;
        }
    }

    public function updateResposta (array $data, int $id_resposta_formulario): bool {
//        $data = $resposta_numerica_decimal_collection->toArray(true);
        if (count($data) > 0) {
            $binds = ['id_resposta_formulario' => $id_resposta_formulario];
            $sql = "
                update resposta_numerica_decimal
            ";
            $sql .= $this->generateUpdateSets($data, $binds);
            $sql .= 'where resposta_numerica_decimal.id_resposta_formulario = :id_resposta_formulario:';
            $query = $this->db->query($sql, $binds);
            $errors = $this->errors();
            return !$errors;
        } else {
            return true;
        }
    }
}
