<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\JsonResponse;
use JWTAuth;
use Arr;

class AdvertEquipRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }


   /*protected function failedValidation(Validator $validator)
    {
        // $errors = [];
        // foreach ($validator->errors()->all() as $key => $value) {
        //    Arr::array_set($errors , $key, $value);
        // }
        $token    = (string) JWTAuth::getToken();
        $response = new JsonResponse([
            'status'  => false,
            'message' => 'The given data is invalid',
            'data'    => $this->request->all(),
            'errors'  => $validator->errors(),
            'token'   => $token,
        ], 422);
        throw new \Illuminate\Validation\ValidationException($validator, $response);
    }*/


    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        

        if ($this->isMethod('post')) {
            // dd($this->postRules());
            return $this->postRules();
        }
        if ($this->isMethod('put')) {
            return $this->putRules();
        }

        
    }
    public function validator($factory)
    {
   $vl =  $factory->make(
        $this->sanitize(), $this->container->call([$this, 'rules']), $this->messages()
    );
  // dd($vl);
   return $vl;
    }

    public function sanitize()
    {
       //dd(json_encode($this->input()));
        if(!is_array($this->input('category_details'))){$category_details = $this->input('category_details');}
        else{$category_details = json_encode($this->input('category_details')); dd($category_details);}

        /*$this->merge([
            'category_details' => json_decode($this->input('category_details'), true)
        ]);*/
        $this->merge([
            'category_details' => json_decode($category_details, true)
        ]);
        //dd($this->all());
        return $this->all();
    }
    public function postRules(){
        $equip_price = ($this->input('advert_type') == 'BUYER') ? 'nullable' : 'required|numeric' ;
        return  [
            'advert_type'        => 'required',
            'advert_duration'    => 'required',
            'prodsvc_id'         => 'required',
            'category_details.equip_catid'     => 'required',
            'category_details.equip_qty'       => 'required|numeric',
            'category_details.equip_price'     => $equip_price,
            'category_details.equip_comments'  => 'nullable',
        ];
    }

    public function putRules(){
        $equip_price = ($this->input('advert_type') == 'BUYER') ? 'nullable' : 'required|numeric' ;
        return [
            'equipment_row'               => 'required',
            'category_details.category_seq'    => 'required',
            'category_details.equip_catid'     => 'required',
            'category_details.equip_qty'       => 'required|numeric',
            'category_details.equip_price'     => $equip_price,
            'category_details.equip_comments'  => 'nullable',
        ];
    }

    // public function attributes(){
    //     return [
    //         'advert_type'       => 'Suitable Advertistment type',
    //         'advert_duration'   => 'Advertistment duration',
    //         'prodsvc_id'        => 'Product or service',
    //         'category_details.equip_catid'    => 'Equipment category',
    //         'category_details.equip_qty'      => 'No Of units',
    //         'category_details.equip_price'    => 'Price per unit',
    //     ];
    // }

}
