<?php

namespace App\UI\Firma;

use App\UI\BasePresenter;
use Nette\Application\UI\Form;
use Nette\Database\Explorer;

class FirmaPresenter extends BasePresenter
{
    /**
     * Vstříkne se dynamický klientský Explorer
     */
    public function __construct(
        private Explorer $kufrikExplorer
    ) {
        parent::__construct();
    }

    public function actionEdit(): void
    {
        $firmaId = $this->getUser()->getIdentity()->firma_id ?? null;

        if (!$firmaId) {
            $this->flashMessage('K účtu není přiřazena žádná aktivní firma.', 'danger');
            $this->redirect('Home:');
        }

        $firma = $this->kufrikExplorer->table('FIRMA')->get($firmaId);

        if (!$firma) {
            $this->flashMessage('Firma nebyla v databázi nalezena.', 'danger');
            $this->redirect('Home:');
        }

        // Predvyplnění formuláře
        $this['firmaForm']->setDefaults([
            'nazev' => $firma->NAZEV,
            'ic' => $firma->IC,
            'dic' => $firma->DIC,
            'platce_dph' => (bool) $firma->PLATCE_DPH,
            'telefon' => $firma->TELEFON,
            'email' => $firma->EMAIL,
            'ulice' => $firma->ULICE,
            'mesto' => $firma->MESTO,
            'psc' => $firma->PSC,
            'cislo_uctu' => $firma->CISLO_UCTU,
            'banka_kod' => $firma->BANKA_KOD,
            'iban' => $firma->IBAN,
            'bic' => $firma->BIC,
        ]);
    }

    protected function createComponentFirmaForm(): Form
    {
        $form = new Form();

        // Základní údaje
        $form->addText('nazev', 'Název firmy / OSVČ:')
            ->setRequired('Zadejte název firmy nebo Vaše jméno.');

        $form->addText('ic', 'IČO:')
            ->setMaxLength(8);

        $form->addText('dic', 'DIČ:')
            ->setMaxLength(12);

        $form->addCheckbox('platce_dph', 'Jsem plátce DPH');

        // Kontakty
        $form->addText('telefon', 'Telefon:');
        $form->addEmail('email', 'E-mail:');

        // Sídlo
        $form->addText('ulice', 'Ulice a ČP:');
        $form->addText('mesto', 'Město:');
        $form->addText('psc', 'PSČ:');

        // Bankovní spojení
        $form->addText('cislo_uctu', 'Číslo účtu:');
        $form->addText('banka_kod', 'Kód banky:');
        $form->addText('iban', 'IBAN:');
        $form->addText('bic', 'BIC / SWIFT:');

        $form->addSubmit('send', 'Uložit firmu');

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

        return $form;
    }

    public function firmaFormSucceeded(Form $form, \stdClass $data): void
    {
        $firmaId = $this->getUser()->getIdentity()->firma_id;

        try {
            $this->kufrikExplorer->table('FIRMA')
                ->where('ID', $firmaId)
                ->update([
                    'NAZEV' => $data->nazev,
                    'IC' => $data->ic,
                    'DIC' => $data->dic,
                    'PLATCE_DPH' => $data->platce_dph ? 1 : 0,
                    'TELEFON' => $data->telefon,
                    'EMAIL' => $data->email,
                    'ULICE' => $data->ulice,
                    'MESTO' => $data->mesto,
                    'PSC' => $data->psc,
                    'CISLO_UCTU' => $data->cislo_uctu,
                    'BANKA_KOD' => $data->banka_kod,
                    'IBAN' => $data->iban,
                    'BIC' => $data->bic,
                ]);

            // Potvrzení s časovým razítkem uložení
            $casUlozeni = (new \DateTime())->format('H:i:s');
            $this->flashMessage("Údaje firmy byly úspěšně uloženy v {$casUlozeni}.", 'success');

        } catch (\Nette\Application\AbortException $e) {
            throw $e;
        } catch (\Throwable $e) {
            $form->addError('Chyba při ukládání firmy: ' . $e->getMessage());
            return;
        }

        $this->redirect('this');
    }
}