<?php

namespace App\Http\Controllers\Patient;

use App\Http\Controllers\Controller;
use App\Models\PatientPlan;
use App\Models\PatientSubscription;
use App\Models\PatientNotification;
use Illuminate\Http\Request;

class SubscriptionController extends Controller
{
    // ===== صفحة الاشتراكات =====
    public function index()
    {
        $patientId = session('patient_id');

        $plans = PatientPlan::where('is_active', true)
            ->orderBy('sort_order')->get();

        // الاشتراك الحالي
        $currentSub = PatientSubscription::with('plan')
            ->where('patient_id', $patientId)
            ->where('status', 'active')
            ->where('ends_at', '>', now())
            ->latest()->first();

        // سجل الاشتراكات
        $history = PatientSubscription::with('plan')
            ->where('patient_id', $patientId)
            ->latest()->take(5)->get();

        return view('patient.subscription.index', compact('plans', 'currentSub', 'history'));
    }

    // ===== اختيار باقة =====
    public function choose($planId)
    {
        $plan = PatientPlan::findOrFail($planId);

        // إذا كانت مجانية اشترك مباشرة
        if ($plan->isFree()) {
            return $this->activateFree($plan);
        }

        return view('patient.subscription.checkout', compact('plan'));
    }

    // ===== تفعيل الباقة المجانية =====
    private function activateFree(PatientPlan $plan)
    {
        $patientId = session('patient_id');

        // إلغاء الاشتراك الحالي
        PatientSubscription::where('patient_id', $patientId)
            ->where('status', 'active')
            ->update(['status' => 'cancelled', 'cancelled_at' => now()]);

        PatientSubscription::create([
            'patient_id'    => $patientId,
            'plan_id'       => $plan->id,
            'billing_cycle' => 'free',
            'amount_paid'   => 0,
            'status'        => 'active',
            'starts_at'     => now(),
            'ends_at'       => now()->addYears(10),
        ]);

        return redirect()->route('patient.subscription.index')
            ->with('success', 'تم تفعيل الباقة المجانية بنجاح');
    }

    // ===== معالجة الدفع (محاكاة) =====
    public function checkout(Request $request, $planId)
    {
        $plan = PatientPlan::findOrFail($planId);

        $data = $request->validate([
            'billing_cycle'  => 'required|in:monthly,yearly',
            'payment_method' => 'required|in:card,cash,tap,stripe',
            'card_name'      => 'nullable|string|max:100',
            'card_number'    => 'nullable|string|max:19',
        ]);

        $patientId  = session('patient_id');
        $amount     = $data['billing_cycle'] === 'yearly'
                        ? $plan->price_yearly
                        : $plan->price_monthly;

        $endsAt     = $data['billing_cycle'] === 'yearly'
                        ? now()->addYear()
                        : now()->addMonth();

        // إلغاء الاشتراك الحالي
        PatientSubscription::where('patient_id', $patientId)
            ->where('status', 'active')
            ->update(['status' => 'cancelled', 'cancelled_at' => now()]);

        // إنشاء الاشتراك الجديد
        $sub = PatientSubscription::create([
            'patient_id'     => $patientId,
            'plan_id'        => $plan->id,
            'billing_cycle'  => $data['billing_cycle'],
            'amount_paid'    => $amount,
            'status'         => 'active',
            'starts_at'      => now(),
            'ends_at'        => $endsAt,
            'payment_method' => $data['payment_method'],
            'transaction_id' => 'TXN-' . strtoupper(uniqid()),
        ]);

        // إشعار
        PatientNotification::send(
            $patientId,
            'general',
            '✅ تم تفعيل اشتراك ' . $plan->name_ar,
            'تم الاشتراك في باقة ' . $plan->name_ar . ' بنجاح. ينتهي في ' . $endsAt->format('Y/m/d'),
            ['subscription_id' => $sub->id]
        );

        return redirect()->route('patient.subscription.index')
            ->with('success', '🎉 تم تفعيل باقة ' . $plan->name_ar . ' بنجاح!');
    }

    // ===== إلغاء الاشتراك =====
    public function cancel()
    {
        $patientId = session('patient_id');

        $sub = PatientSubscription::where('patient_id', $patientId)
            ->where('status', 'active')
            ->where('ends_at', '>', now())
            ->first();

        if (! $sub) {
            return back()->with('error', 'لا يوجد اشتراك نشط');
        }

        $sub->update([
            'status'       => 'cancelled',
            'cancelled_at' => now(),
            'auto_renew'   => false,
        ]);

        return back()->with('success', 'تم إلغاء الاشتراك — يبقى نشطاً حتى ' . $sub->ends_at->format('Y/m/d'));
    }
}
