<?php

namespace Knuckles\Scribe\Writing;

use Illuminate\Support\Facades\View;

/**
 * Writes a basic, mostly empty template, passing the OpenAPI spec URL in for an external client-side renderer.
 */
class ExternalHtmlWriter extends HtmlWriter
{
    public function generate(array $groupedEndpoints, string $sourceFolder, string $destinationFolder)
    {
        $template = $this->config->get('theme');
        $output = View::make("scribe::external.{$template}", [
            'metadata' => $this->getMetadata(),
            'baseUrl' => $this->baseUrl,
            'tryItOut' => $this->config->get('try_it_out'),
            'htmlAttributes' => $this->config->get('external.html_attributes', []),
        ])->render();

        if (! is_dir($destinationFolder)) {
            mkdir($destinationFolder, 0o777, true);
        }

        file_put_contents($destinationFolder.'/index.html', $output);
    }

    public function getMetadata(): array
    {
        // NB:These paths are wrong for laravel type but will be set correctly by the Writer class
        if ($this->config->get('postman.enabled', true)) {
            $postmanCollectionUrl = "{$this->assetPathPrefix}collection.json";
        }
        if ($this->config->get('openapi.enabled', false)) {
            $openApiSpecUrl = "{$this->assetPathPrefix}openapi.yaml";
        }

        return [
            'title' => $this->config->get('title') ?: config('app.name', '').' Documentation',
            'example_languages' => $this->config->get('example_languages'), // may be useful
            'logo' => $this->config->get('logo') ?? false,
            'last_updated' => $this->getLastUpdated(), // may be useful
            'try_it_out' => $this->config->get('try_it_out'), // may be useful
            'postman_collection_url' => $postmanCollectionUrl ?? null,
            'openapi_spec_url' => $openApiSpecUrl ?? null,
        ];
    }
}
