<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;
use App\Models\Addon;
use App\Models\SubscriptionPlan;
use App\Models\SubscriptionRequest;
use App\Services\PlanPricingService;
use Illuminate\Http\Request;

class SubscriptionRequestController extends Controller
{
    public function create()
    {
        $user = request()->user();
        if ($user->is_superadmin ?? false) {
            abort(404);
        }
        if (empty($user->company_id)) {
            abort(403, 'No company associated with your account.');
        }
        $plans = SubscriptionPlan::with('addons')->where('active', true)->orderBy('base_price_monthly')->get();
        $addons = Addon::orderBy('name')->get();
        return view('subscription.request', compact('plans', 'addons'));
    }

    public function store(Request $request, PlanPricingService $pricingService)
    {
        $user = $request->user();
        if ($user->is_superadmin ?? false) {
            abort(404);
        }
        if (empty($user->company_id)) {
            abort(403, 'No company associated with your account.');
        }

        $data = $request->validate([
            'subscription_plan_id' => 'required|exists:subscription_plans,id',
            'employee_count' => 'required|integer|min:1',
            'billing_cycle' => 'required|in:monthly,yearly',
            'addon_ids' => 'nullable|array',
            'addon_ids.*' => 'integer|exists:addons,id',
            'notes' => 'nullable|string|max:1000',
        ]);

        $plan = SubscriptionPlan::findOrFail($data['subscription_plan_id']);
        $pricing = $pricingService->calculateTotal(
            $plan,
            (int) $data['employee_count'],
            $data['addon_ids'] ?? [],
            $data['billing_cycle']
        );

        SubscriptionRequest::create([
            'company_id' => $user->company_id,
            'subscription_plan_id' => $data['subscription_plan_id'],
            'employee_count' => $pricing['employee_count'],
            'billing_cycle' => $pricing['billing_cycle'],
            'selected_addons' => $pricing['selected_addons'],
            'amount' => $pricing['total'],
            'addons_total' => $pricing['addons_total'],
            'calculated_total' => $pricing['total'],
            'currency' => config('app.currency_code', 'INR'),
            'status' => 'pending',
            'requested_at' => now(),
            'notes' => $data['notes'] ?? null,
        ]);

        return redirect()->route('subscription.request')->with('success', 'Your offline subscription request has been submitted. Super Admin will review it shortly.');
    }
}
