<?php

/**
 *  Informatica Eindproject D4p
 *  6in3, Stedelijk Gymnasium Nijmegen
 *  Docent: Hans de Wolf
 *
 *  ==================
 *
 *  Daniel Boutros,
 *  Christiaan Goossens,
 *  Jelmer Hinssen
 */

namespace Inforbank\Application;

use Inforbank\Application;
use Inforbank\Application\Helper\IBAN;
use Inforbank\Application\Helper\Header;
use Inforbank\Application\Helper\Redirect;
use Inforbank\Application\Helper\Rekeningen;
use Slim\App;

class Overboeking
{
    public function __construct(App $app)
    {
        $app->get('/overboeking', function ($request, $response, $args) {
            $rekeningen = Rekeningen::getCurrentUserRekeningen();
            return $this->renderer->render($response, 'overboeking.phtml', [
                        'header' => Header::getHeaderData(),
                        'rekeningen' => $rekeningen
            ]);
        })->add(new Auth\Middleware());

        $app->post('/overboeking', function ($request, $response, $args) {
            $post = $request->getParsedBody();
            $van = $post['van'];
            $naar = $post['naar'];
            $bedrag = $post['bedrag'];
            $omschrijving = $post['omschrijving'];

            $rekeningen = Rekeningen::getCurrentUserRekeningen();

            $vanRekening = false;
            //TODO fatsoenlijke errorafhandeling en redirect
            //Controleer of de rekening wel van de ingelogde klant is
            foreach ($rekeningen as $rek) {
                if ($rek['nr'] === $van) {
                    $vanRekening = $rek;
                    break;
                }
            }
            if (!$vanRekening) {
                //error: rekening is niet van klant
                return Redirect::create($request, $response, "/eigenaar");
            }
            $ibanHelper = new IBAN();
            if (!$ibanHelper->isValidIBAN($naar)) {
                //error: ongeldige iban
                return Redirect::create($request, $response, "/ongeldig");
            } elseif (!($ibanHelper->getLand($naar) == "NL" && $ibanHelper->getBank($naar) === "INFO")) {
                //error: andere bank
                return Redirect::create($request, $response, "/andere");
            }
            $naarRekeningnr = $ibanHelper->getRekeningNummer($naar);
            //TODO kijk of de rekening wel bestaat
            if ($naarRekeningnr == $vanRekening['nr']) {
                //error: afzender is hetzelfde als ontvanger
                return Redirect::create($request, $response, "/zelfde");
            }


            //TODO geldigheid bedrag onderzoeken
            //$bedragValue = (double) $bedrag;
            //TODO omschrijving in database stoppen
            if (strlen($omschrijving) > 40) {
                //error: te lange omschrijving
            }
            $db = Application::getContainer()->db;
            $db->transacties->insert([
                "van" => $vanRekening['nr'],
                "naar" => $naarRekeningnr,
                "bedrag" => $bedrag,
                "type" => "GT" //GT staat voor internetbankieren
            ]);

            //TODO update saldo
            //TODO Checken of het saldo van de rekening onder de 20 euro komt, dan doe je een mededeling via de berichthelper.
            return Redirect::create($request, $response, "/");
        })->add(new Auth\Middleware());
    }
}
