<?php

namespace Xentral\Modules\Api\Controller\Legacy;

use Xentral\Components\Http\Request;
use Xentral\Modules\Api\Exception\BadRequestException;

class DefaultController
{
    /** @var Request $request */
    protected $request;

    /** @var \Api $legacyApi */
    protected $legacyApi;

    /** @var int $apiId */
    protected $apiId;

    /**
     * @param \Api    $legacyApi
     * @param Request $request
     * @param int     $apiId
     */
    public function __construct($legacyApi, $request, $apiId)
    {
        $this->request = $request;
        $this->legacyApi = $legacyApi;
        $this->apiId = $apiId;
    }

    public function postAction()
    {
        $action = $this->request->attributes->get('action');
        $contentType = $this->request->getContentType();
        $content = $this->request->getContent();

        if ($contentType === 'xml') {
            $this->legacyApi->app->Secure->POST['xml'] = '<xml>' . $content . '</xml>';
        }

        if ($contentType === 'json') {
            $requestData = json_decode($content, true);
            $contentPrepared = isset($requestData['data']) ? json_encode($requestData['data']) : $content;
            $this->legacyApi->app->Secure->GET['json'] = true;
            $this->legacyApi->app->Secure->POST['json'] = $contentPrepared;
        }

        // API-Methode aufrufen
        $this->legacyApi->setApiId($this->apiId);
        $this->legacyApi->app->Secure->GET['action'] = $action;
        $apiMethod = 'Api' . $action;

        $actionMapping = [
            'AccountCreate' => 'ApiAdresseAccountCreate',
            'AccountEdit'   => 'ApiAdresseAccountEdit',
        ];
        if (isset($actionMapping[$action])) {
            $apiMethod = $actionMapping[$action];
        }

        $this->legacyApi->$apiMethod();

        // API-Methode liefert normalerweise selbst das Ergebnis aus und beendet die Script-Ausführung.
        // Falls aber eine nicht existierende API-Methode aufgerufen wird, läuft das Script in die Exception.
        throw new BadRequestException();
    }

    public function readAction()
    {
        $this->legacyApi->setApiId($this->apiId);
        $action = $this->request->attributes->get('action');

    }
}