<?php

declare(strict_types=1);

namespace External\HannahBundle\Overrides\View;

use External\HannahBundle\SAP\Exception\SAPException;
use External\HannahBundle\SAP\Util\SAPClient;
use External\HannahBundle\Util\Configuration;
use KupShop\KupShopBundle\Context\LanguageContext;
use KupShop\KupShopBundle\Context\UserContext;
use KupShop\KupShopBundle\Util\Contexts;
use Symfony\Contracts\Service\Attribute\Required;

class UserView extends \KupShop\UserBundle\View\UserView
{
    #[Required]
    public SAPClient $sapClient;
    #[Required]
    public Configuration $configuration;

    protected function handleSubmit(): void
    {
        if (!$this->newUser()) {
            $user = Contexts::get(UserContext::class)->getActive();
            $oldEmail = $user->email;
            $newEmail = $this->request->get('email');
            // Validace e-mailu a nasledne volani parrent metody

            // Ošetření že jdu na editaci uživatele, abzch se vzhnul při registraci chybě, že $user bude null

            if ($oldEmail !== $newEmail) {
                if (!$this->isEmailUseable($newEmail)) {
                    $this->addErrorMessage('Zadaný e-mail je už použit u jiného účtu.');

                    return;
                }
            }
        }
        parent::handleSubmit();
    }

    private function isEmailUseable(string $email): bool
    {
        // Nacteni spravneho procesu pro komunikaci se SAP
        $language = Contexts::get(LanguageContext::class)->getActiveId();
        $process = $this->configuration->getOrderProcess($language);
        // Volání SAP metody  customerValidate
        try {
            $this->sapClient->customerValidate($email, '', $process);
        } catch (SAPException $e) {
            // Pokud dojde k chybě, email není pouzity a setnu true pokud je chyba specifická pro neexistující email
            if (str_contains($e->getMessage(), '095: Pro druh komunikace INT nebyla nalezena žádná adresa')) {
                return true;
            }
        }

        return false;
    }
}
