<?php

namespace App\Http\Requests\Api\Account;

use Illuminate\Foundation\Http\FormRequest;
use App\Support\Formatter;

class AccountContactsRequest extends FormRequest
{
    public function __construct(Formatter $formatter)
    {
        $this->formatter = $formatter;
        $this->contactTypes = config('options.account_contacts');
    }

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

    /**
     * Prepare the data for validation.
     *
     * @return void
     */
    protected function prepareForValidation()
    {
        $contactInfo = $this->contactInfo;
        if (!$contactInfo) {
            return;
        }
        $contacts = [];
        foreach($this->contactTypes as $contactType => $rule) {
            if (!empty($contactInfo[$contactType])) {
                $contacts[$contactType] = [
                    'value' => $this->formatter->transformItem($contactInfo[$contactType]['value'], 'strip_tags|xss_clean|trim'),
                    'public' => $contactInfo[$contactType]['public']
                ];
            }
        }
        $this->merge(['contactInfo' => $contacts]);
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $rules = ['contactInfo' => "required|array"];
        foreach ($this->contactTypes as $contactType => $contactTypeRule) {
            if (!empty($this->contactInfo[$contactType])) {
                $rules["contactInfo.$contactType.value"] = $contactTypeRule;
                $rules["contactInfo.$contactType.public"] = 'required|boolean';
            }
        }
        return $rules;
    }
}
