<?php
    namespace Zampet\Module\Tutor\v0\DTO;

    class PetRacaDTO {
        public ?int $id = null;
        public ?string $uuid = null;
        public ?int $especie_id = null;
        public ?string $descricao = null;

        /**
         * Construtor do DTO.
         *
         * Permite inicializar os atributos do objeto a partir de um array associativo.
         *
         * @param array<string, mixed> $data Array associativo opcional para popular os atributos.
         */
        public function __construct(array $data = []) {
            if (!empty($data)) {
                $this->fromArray($data);
            }
        }

        /**
         * Popula o DTO a partir de um array.
         *
         * @param array<string, mixed> $data
         * @return void
         */
        public function fromArray(array $data): void {
            $this->id = $data['id'] ?? $this->id;
            $this->uuid = $data['uuid'] ?? $this->uuid;
            $this->especie_id = $data['especie_id'] ?? $this->especie_id;
            $this->descricao = $data['descricao'] ?? $this->descricao;
        }

        /**
         * Converte o DTO para um array associativo.
         *
         * @return array<string, mixed>
         */
        public function toArray(): array {
            return [
                'id' => $this->id,
                'uuid' => $this->uuid,
                'especie_id' => $this->especie_id,
                'descricao' => $this->descricao,
            ];
        }

        public function getId(): ?int {
            return $this->id;
        }
        public function setId(?int $id): void {
            $this->id = $id;
        }

        public function getUuid(): ?string {
            return $this->uuid;
        }
        public function setUuid(?string $uuid): void {
            $this->uuid = $uuid;
        }

        public function getEspecieId(): ?int {
            return $this->especie_id;
        }
        public function setEspecieId(?int $especie_id): void {
            $this->especie_id = $especie_id;
        }

        public function getDescricao(): ?string {
            return $this->descricao;
        }
        public function setDescricao(?string $descricao): void {
            $this->descricao = $descricao;
        }
    }