<?php

namespace App\Http\Controllers;

use App\Models\Cart;
use App\Services\CartService;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Str;

class Controller extends BaseController
{
    use AuthorizesRequests, ValidatesRequests;

    /**
     * Get or create cart for the current user/guest
     * 
     * @param Request $request
     * @return Cart
     */
    protected function getCart(Request $request): Cart
    {
        $cartService = app(CartService::class);
        $cookieToken = $request->cookie('cart_token');

        if (!$cookieToken) {
            $cookieToken = Str::random(40);
            cookie()->queue('cart_token', $cookieToken, 60 * 24 * 30); // 30 days
        }

        return $cartService->getOrCreateCart(auth()->user(), $cookieToken);
    }
}
