<?php

namespace App\Http\Controllers;

use App\Campaigns\PerformanceBoard;
use App\Campaigns\PerformanceVerdict;
use App\Campaigns\PerformanceWindows;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\View\View;
use Laravel\Ai\Models\Conversation;

class CampaignPerformanceController extends Controller
{
    public function index(Request $request, PerformanceBoard $board): View
    {
        $data = $board->forUser($request->user(), [
            'q' => (string) $request->query('q', ''),
            'platform' => (string) $request->query('platform', ''),
            'status' => (string) $request->query('status', ''),
            'per_page' => (int) $request->query('per_page', 10),
        ]);

        return view('campaigns.performance', [
            'rows' => $data['rows'],
            'stats' => $data['stats'],
            'totals' => $data['totals'],
            'verdicts' => PerformanceVerdict::cases(),
            'conversations' => $this->conversations(),
        ]);
    }

    public function show(Request $request, PerformanceBoard $board, string $platform, string $campaign): View
    {
        $detail = $board->detailFor($request->user(), $platform, $campaign, [
            'per_page' => (int) $request->query('per_page', 10),
            'log_run_type' => (string) $request->query('log_run_type', ''),
            'log_verdict' => (string) $request->query('log_verdict', ''),
            'log_days' => (int) $request->query('log_days', 0),
            'log_per_page' => (int) $request->query('log_per_page', 10),
        ]);

        abort_if($detail === null, 404);

        return view('campaigns.performance-show', [
            ...$detail,
            'verdicts' => PerformanceVerdict::cases(),
            'window_keys' => PerformanceWindows::orderedWindowKeys(),
            'conversations' => $this->conversations(),
        ]);
    }

    /**
     * @return Collection<int, Conversation>
     */
    private function conversations(): Collection
    {
        return Conversation::query()->latest('updated_at')->limit(30)->get();
    }
}
