<?php


namespace App\Models;

use App\Entities\ClassificacaoRisco\ClassificacaoRisco;
use App\Services\ClassificacaoRiscoService;
use App\Services\JWTService;
use App\Services\PessoaService;
use App\Services\Service;
use App\Utils\DateUtils;
use App\Utils\ModelUtils;
use App\ViewModels\ClassificacaoRisco\ClassificacaoRiscoRegistrationViewModel\ClassificacaoRiscoRegistrationViewModel;
use CodeIgniter\Model;


class ClassificacaoRiscoModel extends ModelEntity {
	protected $table = 'classificacao_risco';
	protected $primaryKey = 'id';
	protected $returnType = 'array';
	protected $allowedFields = [ 
			'descricao',
			'id_unidade',
			'cor',
			'valor',
			'criado_em',
			'atualizado_em',
			'desativado_em',
			'criado_por',
			'alterado_por',
			'desativado_por'
	];
	protected $useSoftDeletes = false;
	protected $skipValidation = true;
	protected $useTimestamps = true;
	protected $createdField = 'criado_em';
	protected $updatedField = 'atualizado_em';

	public function registerClassificacaoRisco(ClassificacaoRisco &$classificacao_risco): void {

		$classificacao_risco_data = $classificacao_risco->toArray();
		unset( $classificacao_risco_data ['id'] );
		unset( $classificacao_risco_data ['criado_em'] );
		unset( $classificacao_risco_data ['atualizado_em'] );
		$id_new_classificacao_risco = $this->insert( $classificacao_risco_data );
		$classificacao_risco->setId( $id_new_classificacao_risco );

	}

	public function updateClassificacaoRiscoByID(int $id_classificacao_risco, ClassificacaoRisco $classificacao_risco): bool {

		$data = $classificacao_risco->toArray( true );
		if (count( $data ) > 0) {
			$binds = [ 
					'id_classificacao_risco' => $id_classificacao_risco
			];
			$sql = "UPDATE classificacao_risco ";
			$sql .= $this->generateUpdateSets( $data, $binds );
			$sql .= 'WHERE classificacao_risco.id = :id_classificacao_risco:';
			$query = $this->db->query( $sql, $binds );
			$errors = $this->errors();
			return !$errors;
		} else {
			return true;
		}

	}

	public function deleteClassificacaoRiscoByID(int $id_classificacao_risco): bool {

		$jwt_payload = JWTService::getTokenJWTPayload();
		$uid = $jwt_payload ? $jwt_payload->getUid() : null;
		$today = DateUtils::today();

		$binds = [ 
				'desativado_por' => $uid,
				'desativado_em' => $today,
				'id_classificacao_risco' => $id_classificacao_risco
		];
		$sql = "UPDATE classificacao_risco SET desativado_por = :desativado_por: , desativado_em = :desativado_em: WHERE classificacao_risco.id = :id_classificacao_risco:";
		$query = $this->db->query( $sql, $binds );

		$errors = $this->errors();
		return !$errors;

	}

}
