<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use App\Services\ArtworkService;
use App\Models\ContentType;

class PhotographyController extends Controller
{
    protected ArtworkService $artworks;

    public function __construct(ArtworkService $artworks)
    {
        $this->artworks = $artworks;
    }

    public function index(Request $request)
    {
        $segment = strtolower($request->segment(1) ?? 'photography');
        $contentSlug = in_array($segment, ['photography','wallpapers','skins','other']) ? $segment : 'photography';

        $group = ucfirst($contentSlug);

        $id = null;
        if ($contentSlug === 'photography') {
            $id = 3;
        }

        $category = null;
        try {
            if ($id !== null && Schema::hasTable('artworks_categories')) {
                $category = DB::table('artworks_categories')
                    ->select('category_name', 'rootid', 'section_id', 'description', 'category_id')
                    ->where('category_id', $id)
                    ->first();
            }
        } catch (\Throwable $e) {
            $category = null;
        }

        $ct = ContentType::where('slug', $contentSlug)->first();
        $page_title = $category->category_name ?? ($ct->name ?? ucfirst($contentSlug));
        $tidy = $category->description ?? ($ct->description ?? null);

        $perPage = 40;
        $sort = (string) $request->get('sort', 'latest');

        try {
            $artworks = $this->artworks->getArtworksByContentType($contentSlug, $perPage, $sort);
        } catch (\Throwable $e) {
            $artworks = new \Illuminate\Pagination\LengthAwarePaginator([], 0, $perPage, 1, [
                'path' => url()->current(),
            ]);
        }

        $subcategories = collect();
        try {
            if ($id !== null && Schema::hasTable('artworks_categories')) {
                $subcategories = DB::table('artworks_categories')->select('category_id','category_name')->where('rootid', $id)->orderBy('category_name')->get();
                if ($subcategories->count() == 0 && !empty($category->rootid)) {
                    $subcategories = DB::table('artworks_categories')->select('category_id','category_name')->where('rootid', $category->rootid)->orderBy('category_name')->get();
                }
            }
        } catch (\Throwable $e) {
            $subcategories = collect();
        }

        if (! $subcategories || $subcategories->count() === 0) {
            if ($ct) {
                $subcategories = $ct->rootCategories()
                    ->orderBy('sort_order')
                    ->orderBy('name')
                    ->get()
                    ->map(fn ($c) => (object) ['category_id' => $c->id, 'category_name' => $c->name, 'slug' => $c->slug]);
            } else {
                $subcategories = collect();
            }
        }

        if ($artworks instanceof \Illuminate\Database\Eloquent\Collection || $artworks instanceof \Illuminate\Support\Collection) {
            $page = (int) ($request->query('page', 1));
            $artworks = new \Illuminate\Pagination\LengthAwarePaginator($artworks->values()->all(), $artworks->count(), $perPage, $page, [
                'path' => url()->current(),
                'query' => request()->query(),
            ]);
        }

        $contentType = ContentType::where('slug', $contentSlug)->first();
        $rootCategories = $contentType
            ? $contentType->rootCategories()->orderBy('sort_order')->orderBy('name')->get()
            : collect();

        $page_meta_description = $tidy;

        return view('legacy::content-type', compact('contentType','rootCategories','artworks','page_title','page_meta_description','subcategories','id'));
    }
}
