<?php

namespace App\Http\Controllers\Api\V1\Admin\Audit;

use App\Models\AuditLog;
use Illuminate\Http\Request;
use App\Support\AdminApiList;
use App\Support\ApiResponse;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Support\AuditLogApiPresenter;

/**
 * GET /api/v1/admin/audit-logs — 运营/客服查询审计留痕。
 */
final class AuditLogIndexController extends Controller
{
    public function __invoke(Request $request): JsonResponse
    {
        $p = AdminApiList::readPaging($request);
        $module = trim((string) $request->query('module_code', ''));
        $action = trim((string) $request->query('action_code', ''));
        $operatorType = trim((string) $request->query('operator_type', ''));
        $operatorId = (int) $request->query('operator_id', 0);
        $startDate = trim((string) $request->query('start_date', ''));
        $endDate = trim((string) $request->query('end_date', ''));

        $q = AuditLog::query()->orderByDesc('id');

        if ($module !== '') {
            $q->where('module_code', $module);
        }
        if ($action !== '') {
            $q->where('action_code', $action);
        }
        if ($operatorType !== '') {
            $q->where('operator_type', $operatorType);
        }
        if ($operatorId > 0) {
            $q->where('operator_id', $operatorId);
        }
        if ($startDate !== '') {
            $q->whereDate('created_at', '>=', $startDate);
        }
        if ($endDate !== '') {
            $q->whereDate('created_at', '<=', $endDate);
        }

        $paginator = $q->paginate($p['perPage'], ['*'], 'page', $p['page']);

        return ApiResponse::success(AuditLogApiPresenter::listPayload($paginator));
    }
}