<?php

declare(strict_types=1);


namespace App\Blog\Controllers;

use App\Models\Post;
use Carbon\Carbon;

class ArchiveController extends Controller
{
    public function index()
    {
        $posts = Post::published()->orderByDesc('published_at')->get(['id', 'title', 'slug', 'published_at']);

        $archives = $posts->groupBy(fn (Post $post) => $post->published_at->format('Y'))
            ->map(fn ($yearPosts) => $yearPosts->groupBy(fn (Post $post) => $post->published_at->format('m')));

        return theme_view('archives', compact('archives'));
    }

    public function month(string $year, string $month)
    {
        $start = Carbon::create((int) $year, (int) $month, 1)->startOfMonth();
        $end = (clone $start)->endOfMonth();

        $posts = Post::query()
            ->whereBetween('published_at', [$start, $end])
            ->published()
            ->orderByDesc('published_at')
            ->paginate((int) blog_setting('per_page', config('blog.per_page')));

        return theme_view('list', compact('posts'))
            ->with('archiveTitle', "{$year} 年 {$month} 月");
    }
}
