<?php

namespace App\Http\Controllers\Panel;

use App\Http\Controllers\Controller;
use App\Models\CustomerClubReward;
use App\Services\CustomerClubService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ClubController extends Controller
{
    public function index()
    {
        $user    = Auth::user();
        $account = CustomerClubService::ensureAccount($user);
        $rewards = CustomerClubReward::where('user_id', $user->id)
            ->latest()
            ->paginate(15);

        $activities = [
            [
                'key'         => 'spin_wheel',
                'title'       => 'گردونه شانس',
                'description' => 'گردونه را بچرخانید و اعتبار تومانی جایزه بگیرید. با هر سفارش موفق یک شانس جدید دریافت می‌کنید.',
                'icon'        => 'bi-disc',
                'route'       => route('panel.club.wheel'),
                'badge'       => $account->available_spins . ' شانس',
                'enabled'     => true,
            ],
        ];

        return view('panel.club.index', compact('account', 'rewards', 'activities'));
    }

    public function wheel()
    {
        $user    = Auth::user();
        $account = CustomerClubService::ensureAccount($user);
        $prizes  = CustomerClubService::wheelPrizes();

        $prizesForJs = collect($prizes)->map(function ($p) {
            return [
                'amount'       => (int) $p['amount'],
                'label'        => $p['label'],
                'angle_center' => (float) $p['angle_center'],
            ];
        })->values()->all();

        return view('panel.club.wheel', compact('account', 'prizes', 'prizesForJs'));
    }

    public function spin(Request $request)
    {
        try {
            $result = CustomerClubService::spin(Auth::user());

            return response()->json([
                'success' => true,
                'message' => $result['amount'] > 0
                    ? 'تبریک! ' . number_format($result['amount']) . ' تومان به کیف پول شما اضافه شد.'
                    : 'این بار جایزه نقدی نشد؛ دوباره تلاش کنید.',
                'result'  => $result,
            ]);
        } catch (\RuntimeException $e) {
            return response()->json([
                'success' => false,
                'message' => $e->getMessage(),
            ], 422);
        } catch (\Throwable $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطا در چرخاندن گردونه. لطفاً دوباره تلاش کنید.',
            ], 500);
        }
    }
}
