<?php

declare(strict_types=1);

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Models\Page;
use Illuminate\View\View;

/**
 * PageController — DB-driven static pages (/pages/:slug).
 *
 * Also handles root-level marketing pages (/about, /help, /contact)
 * and legal pages (/legal/terms, /legal/privacy, /legal/cookies).
 */
final class PageController extends Controller
{
    public function show(string $slug): View
    {
        $page = Page::published()->where('slug', $slug)->firstOrFail();

        return view('web.pages.show', [
            'page'                  => $page,
            'page_title'            => ($page->meta_title ?: $page->title) . ' — Skinbase',
            'page_meta_description' => $page->meta_description ?: '',
            'page_canonical'        => $page->canonical_url,
            'page_robots'           => 'index,follow',
            'breadcrumbs'           => collect([
                (object) ['name' => $page->title, 'url' => $page->url],
            ]),
        ]);
    }

    /**
     * Serve root-level marketing slugs (/about, /help, /contact).
     * Falls back to 404 if no matching page exists.
     */
    public function marketing(string $slug): View
    {
        $page = Page::published()->where('slug', $slug)->firstOrFail();

        return view('web.pages.show', [
            'page'                  => $page,
            'page_title'            => ($page->meta_title ?: $page->title) . ' — Skinbase',
            'page_meta_description' => $page->meta_description ?: '',
            'page_canonical'        => url('/' . $slug),
            'page_robots'           => 'index,follow',
            'breadcrumbs'           => collect([
                (object) ['name' => $page->title, 'url' => '/' . $slug],
            ]),
        ]);
    }

    /**
     * Legal pages (/legal/terms, /legal/privacy, /legal/cookies).
     * Looks for page with slug "legal-{section}".
     */
    public function legal(string $section): View
    {
        $page = Page::published()->where('slug', 'legal-' . $section)->firstOrFail();

        return view('web.pages.show', [
            'page'                  => $page,
            'page_title'            => ($page->meta_title ?: $page->title) . ' — Skinbase',
            'page_meta_description' => $page->meta_description ?: '',
            'page_canonical'        => url('/legal/' . $section),
            'page_robots'           => 'index,follow',
            'breadcrumbs'           => collect([
                (object) ['name' => 'Legal', 'url' => '#'],
                (object) ['name' => $page->title, 'url' => '/legal/' . $section],
            ]),
        ]);
    }
}
