<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Report;
use App\Models\Item;
use App\Models\User;
use App\Models\AdminSetting;
use Illuminate\Http\Request;

class AdminReportController extends Controller
{
    public function index()
    {
        $reports = Report::with(['reporter', 'reviewedBy'])
            ->latest()
            ->paginate(20);

        $pendingCount = Report::where('status', 'pending')->count();

        return view('admin.reports.index', compact('reports', 'pendingCount'));
    }

    public function show(Report $report)
    {
        $report->load(['reporter', 'reviewedBy']);
        
        // Get the reported item or user
        $reportable = $report->getReportableAttribute();

        return view('admin.reports.show', compact('report', 'reportable'));
    }

    public function review(Request $request, Report $report)
    {
        $validated = $request->validate([
            'admin_notes' => 'nullable|string|max:1000',
            'action' => 'required|in:flag_item,ban_user,no_action'
        ]);

        $report->update([
            'status' => 'reviewed',
            'reviewed_by' => auth()->id(),
            'reviewed_at' => now(),
            'admin_notes' => $validated['admin_notes']
        ]);

        // Take action based on admin decision
        switch ($validated['action']) {
            case 'flag_item':
                if ($report->reportable_type === 'item') {
                    $item = Item::find($report->reportable_id);
                    if ($item) {
                        $item->update(['status' => 'flagged']);
                    }
                }
                break;
            case 'ban_user':
                if ($report->reportable_type === 'user') {
                    $user = User::find($report->reportable_id);
                    if ($user) {
                        $user->update(['is_active' => false]);
                    }
                } elseif ($report->reportable_type === 'item') {
                    $item = Item::find($report->reportable_id);
                    if ($item && $item->user) {
                        $item->user->update(['is_active' => false]);
                    }
                }
                break;
        }

        return redirect()->route('admin.reports.index')
            ->with('success', 'Report reviewed and action taken.');
    }

    public function resolve(Report $report)
    {
        $report->update([
            'status' => 'resolved',
            'reviewed_by' => auth()->id(),
            'reviewed_at' => now()
        ]);

        return redirect()->route('admin.reports.index')
            ->with('success', 'Report marked as resolved.');
    }

    public function dismiss(Report $report)
    {
        $report->update([
            'status' => 'dismissed',
            'reviewed_by' => auth()->id(),
            'reviewed_at' => now()
        ]);

        return redirect()->route('admin.reports.index')
            ->with('success', 'Report dismissed.');
    }
}