<?php


namespace App\Models;


use App\Entities\RespostaEscolhaOpcao\RespostaEscolhaOpcao;
use App\Services\LogService;
use App\Utils\Collections\GeneralCollection;

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


    public function registerRespostaEscolhaOpcaoCollection (GeneralCollection $resposta_escolha_opcao_collection): bool {
        if ($resposta_escolha_opcao_collection->length === 0) {
            return true;
        }
        $sql = 'insert into resposta_escolha_opcao (
                    `id_resposta_formulario`,
                    `id_opcao_pergunta`
                ) values ();
        ';
        $values = $resposta_escolha_opcao_collection->map(function (RespostaEscolhaOpcao $resposta_escolha_opcao) : string {
            return "(
                {$resposta_escolha_opcao->getIdRESPOSTAFORMULARIO()},   
                {$resposta_escolha_opcao->getIdOPCAOPERGUNTA()}   
            )";
        })->join(',');
        $sql = str_replace('values ()', "values $values;", $sql);
        $query = $this->db->query($sql);
        return $query->connID->affected_rows === $resposta_escolha_opcao_collection->length;
    }

    public function updateRespostaEscolhaOpcaoCollection (RespostaEscolhaOpcao $resposta_numerica_inteira_collection, int $id_resposta_formulario): bool {
        $data = $resposta_numerica_inteira_collection->toArray(true);
        if (count($data) > 0) {
            $binds = ['id_resposta_formulario' => $id_resposta_formulario];
            $data_arr = $data['id_opcao_pergunta']->toArray();
            if (count($data_arr) == 1 && $data_arr[0]["id_opcao_pergunta"] == NULL) {
                return true;
            }

            $sql = "
            delete resposta_escolha_opcao from resposta_escolha_opcao
            where resposta_escolha_opcao.id_resposta_formulario = :id_resposta_formulario:";

            $query = $this->db->query($sql, $binds);
            $affected_rows = $query->connID->affected_rows;
            if($affected_rows < 0) {
                return false;
            }

            $sql = 'insert into resposta_escolha_opcao (
                `id_resposta_formulario`,
                `id_opcao_pergunta`
            ) values ();';
            $data_value = null;
            $values_error = false;
            foreach ($data['id_opcao_pergunta']->toArray() as $row){
                $resposta_opcao = $row["resposta_opcao"];
                if ($resposta_opcao) {
                    $data_value = $data_value ."(".$id_resposta_formulario.",".$resposta_opcao."),";
                } else {
                    $values_error = true;
                }
            }
            $values = substr($data_value, 0, -1);
            $sql = str_replace('values ()', "values $values;", $sql);
            $query = $this->db->query($sql);
            $errors = $this->errors();

            return !$errors;
        } else {
            return true;
        }
    }

    public function updateResposta (array $data, int $id_resposta_formulario): bool {
//        $data = $resposta_numerica_inteira_collection->toArray(true);
        if (count($data) > 0) {
            $binds = [$id_resposta_formulario ];
            $data_arr = $data['opcoes'];
            if (count($data_arr) == 1 && $data_arr[0]["id_opcao_pergunta"] == NULL) {
                return true;
            }

            $sql = "
            delete resposta_escolha_opcao from resposta_escolha_opcao
            where resposta_escolha_opcao.id_resposta_formulario=?";

            $query = $this->db->query($sql, $binds);
            $affected_rows = $query->connID->affected_rows;
            if($affected_rows < 0) {
                return false;
            }

            $sql = "insert into resposta_escolha_opcao (id_resposta_formulario, id_opcao_pergunta) values ()";
            $data_value = null;
            $values_error = false;
            foreach ($data["resposta_pergunta_opcao"] as $row) {
                $resposta_opcao = $row["resposta_opcao"] != null ? $row["resposta_opcao"] : $row["id"];
                if ($resposta_opcao) {
                    $data_value = $data_value ."(".$id_resposta_formulario.",".$resposta_opcao."),";
                } else {
                    $values_error = true;
                }
            }

            $values = substr($data_value, 0, -1);

            $sql = str_replace('values ()', "values $values;", $sql);

            $query = $this->db->query($sql);
            $errors = $this->errors();

            return !$errors;
        } else {
            return true;
        }
    }

}
