<?php

namespace Hydrators;

use Doctrine\ODM\MongoDB\DocumentManager;
use Doctrine\ODM\MongoDB\Hydrator\HydratorException;
use Doctrine\ODM\MongoDB\Hydrator\HydratorInterface;
use Doctrine\ODM\MongoDB\Query\Query;
use Doctrine\ODM\MongoDB\Mapping\ClassMetadata;

use function array_key_exists;
use function gettype;
use function is_array;

/**
 * THIS CLASS WAS GENERATED BY THE DOCTRINE ODM. DO NOT EDIT THIS FILE.
 */
class AppDocumentAdministrativeCustomsAddressHydrator implements HydratorInterface
{
    public function __construct(private DocumentManager $dm, private ClassMetadata $class) {}

    public function hydrate(object $document, array $data, array $hints = []): array
    {
        $hydratedData = [];

        // Field(type: "string")
        if (isset($data['companyName']) || (! empty($this->class->fieldMappings['companyName']['nullable']) && array_key_exists('companyName', $data))) {
            $value = $data['companyName'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['companyName']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['companyName']->setValue($document, $return);
            $hydratedData['companyName'] = $return;
        }

        // Field(type: "string")
        if (isset($data['street']) || (! empty($this->class->fieldMappings['street']['nullable']) && array_key_exists('street', $data))) {
            $value = $data['street'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['street']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['street']->setValue($document, $return);
            $hydratedData['street'] = $return;
        }

        // Field(type: "string")
        if (isset($data['houseNumber']) || (! empty($this->class->fieldMappings['houseNumber']['nullable']) && array_key_exists('houseNumber', $data))) {
            $value = $data['houseNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['houseNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['houseNumber']->setValue($document, $return);
            $hydratedData['houseNumber'] = $return;
        }

        // Field(type: "string")
        if (isset($data['zipcode']) || (! empty($this->class->fieldMappings['zipcode']['nullable']) && array_key_exists('zipcode', $data))) {
            $value = $data['zipcode'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['zipcode']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['zipcode']->setValue($document, $return);
            $hydratedData['zipcode'] = $return;
        }

        // Field(type: "string")
        if (isset($data['city']) || (! empty($this->class->fieldMappings['city']['nullable']) && array_key_exists('city', $data))) {
            $value = $data['city'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['city']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['city']->setValue($document, $return);
            $hydratedData['city'] = $return;
        }

        // Field(type: "string")
        if (isset($data['country']) || (! empty($this->class->fieldMappings['country']['nullable']) && array_key_exists('country', $data))) {
            $value = $data['country'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['country']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['country']->setValue($document, $return);
            $hydratedData['country'] = $return;
        }

        // Field(type: "string")
        if (isset($data['vatNumber']) || (! empty($this->class->fieldMappings['vatNumber']['nullable']) && array_key_exists('vatNumber', $data))) {
            $value = $data['vatNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['vatNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['vatNumber']->setValue($document, $return);
            $hydratedData['vatNumber'] = $return;
        }

        // Field(type: "string")
        if (isset($data['eoriNumber']) || (! empty($this->class->fieldMappings['eoriNumber']['nullable']) && array_key_exists('eoriNumber', $data))) {
            $value = $data['eoriNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['eoriNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['eoriNumber']->setValue($document, $return);
            $hydratedData['eoriNumber'] = $return;
        }

        // Field(type: "string")
        if (isset($data['cbamAccountNumber']) || (! empty($this->class->fieldMappings['cbamAccountNumber']['nullable']) && array_key_exists('cbamAccountNumber', $data))) {
            $value = $data['cbamAccountNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['cbamAccountNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['cbamAccountNumber']->setValue($document, $return);
            $hydratedData['cbamAccountNumber'] = $return;
        }

        // Field(type: "string")
        if (isset($data['zazAccountNumber']) || (! empty($this->class->fieldMappings['zazAccountNumber']['nullable']) && array_key_exists('zazAccountNumber', $data))) {
            $value = $data['zazAccountNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['zazAccountNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['zazAccountNumber']->setValue($document, $return);
            $hydratedData['zazAccountNumber'] = $return;
        }

        // Field(type: "string")
        if (isset($data['eudrDdsReferenceNumber']) || (! empty($this->class->fieldMappings['eudrDdsReferenceNumber']['nullable']) && array_key_exists('eudrDdsReferenceNumber', $data))) {
            $value = $data['eudrDdsReferenceNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['eudrDdsReferenceNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['eudrDdsReferenceNumber']->setValue($document, $return);
            $hydratedData['eudrDdsReferenceNumber'] = $return;
        }

        // Field(type: "string")
        if (isset($data['legalMentionsLine']) || (! empty($this->class->fieldMappings['legalMentionsLine']['nullable']) && array_key_exists('legalMentionsLine', $data))) {
            $value = $data['legalMentionsLine'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['legalMentionsLine']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['legalMentionsLine']->setValue($document, $return);
            $hydratedData['legalMentionsLine'] = $return;
        }

        // Field(type: "string")
        if (isset($data['phoneNumber']) || (! empty($this->class->fieldMappings['phoneNumber']['nullable']) && array_key_exists('phoneNumber', $data))) {
            $value = $data['phoneNumber'];
            if ($value !== null) {
                $typeIdentifier = $this->class->fieldMappings['phoneNumber']['type'];
                $return = (string) $value;
            } else {
                $return = null;
            }
            $this->class->propertyAccessors['phoneNumber']->setValue($document, $return);
            $hydratedData['phoneNumber'] = $return;
        }

        return $hydratedData;
    }
}