<?php

namespace Modules\Order\Requests\Api\Order;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\ValidationException;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
use Modules\Order\Services\CartService;
use Modules\Order\Services\OrderService;
use Modules\User\Services\AccountService;

class ShowRequest extends FormRequest
{
    public function __construct(
        private OrderService $orderService,
        private AccountService $accountService,
    ){}

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $account = $this->accountService->getAccount();
        $order = $this->orderService->getItem($this->id);
        $rules = [];
        if (!$order )
        {
            return
            [
                'not_exist' => 'required'
            ];
        }
        if($order->user_id != $account['user']->id || $order->user_status != $account['status'])
        {
            return
            [
                'not_exist' => 'required'
            ];
        }
        return $rules;
    }

    public function messages()
    {
        return [
            'over_count.required' => __('web.over_count'),
            'not_exist.required' => __('web.not_exist')
        ];
    }

    /**
     * Get custom attributes for validator errors.
     *
     * @return array
     */
    public function attributes()
    {

        $attributes= [
            'product_id' => __('web.product_id'),
            'count' => __('web.count'),
            'option_id' => __('web.option'),
        ];
        return $attributes;
    }

    /**
     * Handle a failed validation attempt.
     *
     * Override the parent method action if the request is for AJAX
     *
     * @param  \Illuminate\Contracts\Validation\Validator  $validator
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function failedValidation(Validator $validator)
    {
        // Change response attitude if the request done via Ajax requests like API requests

        $errors = (new ValidationException($validator))->errors();
        $message = $validator->errors()->first();
        throw new HttpResponseException(response()->json(['message'=> $message, 'errors' => $errors],  400));

    }
}
