<?php

namespace Silva\Adrema\Support;

use Cache;
use Silva\Adrema\Models\Settings;
use Http;
use Illuminate\Http\JsonResponse;

class Proxy
{
    public function run(string $url): ?array
    {
        if ($url === 'api/form') {
            return Cache::rememberForever('adrema-all-events', fn () => $this->get($url));
        }

        return $this->get($url);
    }

    protected function get(string $url): ?array
    {
        $response = Http::header('Accept', 'application/json')->get($this->url($url));

        if (!$response->ok) {
            return null;
        }

        return json_decode($response->body, true);
    }

    public function submit(string $url): JsonResponse
    {
        $headers = request()->header('X-Adrema-Token')
            ? [
                'Authorization' => 'Bearer ' . request()->header('X-Adrema-Token'),
            ]
            : [];
        $response = Http::make($this->url($url), 'POST')
            ->setOption(CURLOPT_POSTFIELDS,  json_encode(request()->input()))
            ->header([...$headers, 'Accept' => 'application/json', 'Content-Type' => 'application/json'])
            ->send();

        return response()->json(json_decode($response->body, true), $response->code);
    }

    private function url(string $internal): string
    {
        return Settings::get('base_url') . str($internal)->start('/') . (request()->query() ? '?' . http_build_query(request()->query()) : '');
    }
}