<?php

namespace App\Http\Controllers\Frontend;

use App\Facades\SubPlansService;
use App\Facades\SubscriptionsService;
use App\Http\Controllers\Controller;
use App\Http\Requests\ContactSubscriptionRequest;
use App\Http\Requests\SubscriptionRequest;
use App\Http\Resources\Subscriptions\SubscriptionPlanOptionResource;
use App\Http\Resources\Subscriptions\SubscriptionResource;
use App\Mailables\SubscriptionContactEmail;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;

class SubscriptionsController extends Controller
{
    public function create(SubscriptionRequest $request)
    {
        $user = Auth::user();
        $data = $request->validated();

        $subscription = SubscriptionsService::create(
            $user,
            $data['subscriptionPlanOptionId'],
            $data['subscriptionRewardId'] ?? null
        );

        return response()->json(['success' => $subscription != null]);
    }

    public function getSubscriptionPlanOption($planOptionId)
    {
        $subscriptionPlanOption = SubscriptionsService::getSubscriptionPlanOption($planOptionId);
        $subPlan = SubPlansService::getSubPlanBySubscriptionPlanId($subscriptionPlanOption->subscription_plan_id);

        return [
            'subscriptionPlanOption' => !empty($subscriptionPlanOption) ? new SubscriptionPlanOptionResource($subscriptionPlanOption) : null,
            'signSubPlanFeatures' => !empty($subPlan) ? new SubscriptionResource($subPlan) : null,
        ];
    }

    public function getBasicPlan()
    {
        $subPlan = SubPlansService::getBasicSubPlan();

        return [
            'signSubPlanFeatures' => !empty($subPlan) ? new SubscriptionResource($subPlan) : null,
        ];
    }

    public function contactSubscription(ContactSubscriptionRequest $request)
    {
        $user = Auth::user();
        $data = $request->validated();

        $mail = new SubscriptionContactEmail($user, $data['type'], $data['targetPlanOptionId'] ?? null);

        // Send to service email with CC for testing
        Mail::to(config('mail.mail_to_subscription_service_email'))
            ->cc(config('mail.mail_to_subscription_service_cc_email'))
            ->send($mail);

        return response()->json(['success' => true]);
    }
}
