<?php

namespace App\UI\Sign;

use Nette\Application\UI\Presenter;
use Nette\Application\UI\Form;
use Nette\Security\AuthenticationException;

class SignPresenter extends Presenter
{
    /**
     * Vytvoření přihlašovacího formuláře
     */
    protected function createComponentSignInForm(): Form
    {
        $form = new Form();

        $form->addEmail('email', 'E-mail:')
            ->setRequired('Zadejte prosím váš e-mail.')
            ->setHtmlAttribute('placeholder', 'jan@novak.cz');

        $form->addPassword('password', 'Heslo:')
            ->setRequired('Zadejte prosím heslo.');

        $form->addSubmit('send', 'Přihlásit se');

        $form->onSuccess[] = [$this, 'signInFormSucceeded'];

        return $form;
    }

    /**
     * Zpracování formuláře po odeslání
     */
    public function signInFormSucceeded(Form $form, \stdClass $data): void
    {
        try {
            // Zavolá náš Authenticator spojený s Master DB
            $this->getUser()->login($data->email, $data->password);

            $this->flashMessage('Přihlášení proběhlo úspěšně.', 'success');
            
            // Přesměrování do hlavní části aplikace (např. HomePresenter)
            $this->redirect('Home:');

        } catch (AuthenticationException $e) {
            $form->addError('Nespravný e-mail nebo heslo.');
        }
    }

    /**
     * Akce pro odhlášení
     */
    public function actionOut(): void
    {
        $this->getUser()->logout(true); // smaže i identitu
        $this->flashMessage('Byli jste úspěšně odhlášeni.', 'info');
        $this->redirect('in');
    }
}