<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Validation\Rule;

use App\Models\{Domain,Echoarea};

class DomainRequest extends FormRequest
{
	public function authorize(Domain $o)
	{
		return Gate::allows('admin',$o);
	}

	public function rules(Request $request)
	{
		if (! $request->isMethod('post'))
			return [];

		$o = $this->route('o');

		return [
			'name' => [
				'required',
				'max:8',
				'regex:/^[a-z-_~]{1,8}$/',
				Rule::unique('domains')
					->where(fn($query)=>$query
						->where('name',$request->post('name'))
						->when($o?->exists,fn($query)=>$query->where('id','<>',$o->id))
					)
			],
			'dnsdomain' => [
				'nullable',
				'regex:/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i',
				Rule::unique('domains')
					->where(fn($query)=>$query
						->where('dnsdomain',$request->post('dnsdomain'))
						->when($o?->exists,fn($query)=>$query->where('id','<>',$o->id))
					)
			],
			'active' => 'required|boolean',
			'public' => 'required|boolean',
			'accept_app' => 'required|boolean',
			'flatten' => 'nullable|boolean',
			'nodestatus_id' => [
				'nullable',
				Rule::exists(Echoarea::class,'id'),
				Rule::in($o?->echoareas->pluck('id')),
			]
		];
	}
}