public function rules(): array 	{ 		return [ 			'paid' => ['prohibited'], 			'relevant' => ['prohibited'], 			'survey_id' => ['prohibited'], 			'status' => ['prohibited'], 			'start_date' => ['required_unless:draft,true', 'date', 'after:' . formatTimestamp()], 			'end_date' => ['required_unless:draft,true', 'date', 'after:start_date'], 			'invitation_date' => ['nullable', 'date', 'after_or_equal:start_date', 'before:end_date', Rule::requiredIf(fn () => !$this->draft && $this->send_codes_via_email)], 			'reminder_date' => ['nullable', 'date', 'after:invitation_date', 'before:end_date'], 			'number_of_employees' => ['required_unless:draft,true', 'integer'], 			'number_of_male_employees' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_male_employees, 				$this->number_of_female_employees, 				$this->number_of_other_employees, 			], $this->number_of_employees ?? 0, 'gender')], 			'number_of_female_employees' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_male_employees, 				$this->number_of_female_employees, 				$this->number_of_other_employees, 			], $this->number_of_employees ?? 0, 'gender')], 			'number_of_other_employees' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_male_employees, 				$this->number_of_female_employees, 				$this->number_of_other_employees, 			], $this->number_of_employees ?? 0, 'gender')], 			'number_of_employees_with_special_qualification' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_employees_with_special_qualification, 				$this->number_of_employees_with_higher_qualification, 				$this->number_of_employees_with_middle_qualification, 				$this->number_of_employees_with_lower_qualification, 			], $this->number_of_employees ?? 0, 'qualification')], 			'number_of_employees_with_higher_qualification' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_employees_with_special_qualification, 				$this->number_of_employees_with_higher_qualification, 				$this->number_of_employees_with_middle_qualification, 				$this->number_of_employees_with_lower_qualification, 			], $this->number_of_employees ?? 0, 'qualification')], 			'number_of_employees_with_middle_qualification' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_employees_with_special_qualification, 				$this->number_of_employees_with_higher_qualification, 				$this->number_of_employees_with_middle_qualification, 				$this->number_of_employees_with_lower_qualification, 			], $this->number_of_employees ?? 0, 'qualification')], 			'number_of_employees_with_lower_qualification' => ['nullable', 'integer', 'min:0', new CheckEmployeeDataIsLessThanTotalEmployeeCount([ 				$this->number_of_employees_with_special_qualification, 				$this->number_of_employees_with_higher_qualification, 				$this->number_of_employees_with_middle_qualification, 				$this->number_of_employees_with_lower_qualification, 			], $this->number_of_employees ?? 0, 'qualification')], 			'online_applicants_count' => ['required_unless:draft,true', 'nullable', 'integer', 'min:0', 				new CheckApplicantEmployeesCountMatchesSettings([$this->online_applicants_count, $this->offline_applicants_count]), 				new CheckEmployeeDataIsLessThanTotalEmployeeCount([$this->online_applicants_count, $this->offline_applicants_count], $this->number_of_employees ?? 0, 'applicant'), 			], 			'offline_applicants_count' => ['required_unless:draft,true', 'nullable', 'integer', 'min:0', 				new CheckApplicantEmployeesCountMatchesSettings([$this->online_applicants_count, $this->offline_applicants_count]), 				new CheckEmployeeDataIsLessThanTotalEmployeeCount([$this->online_applicants_count, $this->offline_applicants_count], $this->number_of_employees ?? 0, 'applicant'), 			], 			'multiple_access_codes' => ['boolean'], 			'emails' => ['array', Rule::requiredIf(fn () => !$this->draft && $this->send_codes_via_email), new ValidateEmailsListCount($this->online_applicants_count)], 			'emails.*' => ['required', 'email', 'max:50', 'distinct'], 			'email_languages' => ['array', 'bail', 'required_with:emails', new ValidateEmailLanguageKeys($this->emails)], 			'email_languages.*' => ['required', 'string', new Enum(DomainLanguages::class)], 			'location_answer_required' => ['boolean'], 			'department_answer_required' => ['boolean'],  			'locations' => ['array', 'required_if:location_answer_required,true'], 			'locations.*.title_en' => ['nullable', 'string', 'max:150'], 			'locations.*.title_hr' => ['nullable', 'string', 'max:150'], 			'locations.*.title_bs' => ['nullable', 'string', 'max:150'], 			'locations.*.title_mk' => ['nullable', 'string', 'max:150'], 			'locations.*.title_sl' => ['nullable', 'string', 'max:150'], 			'locations.*.title_sr' => ['nullable', 'string', 'max:150'], 			'locations.*.title_fr' => ['nullable', 'string', 'max:150'], 			'locations.*.title_de' => ['nullable', 'string', 'max:150'], 			'locations_description_en' => ['nullable', 'string', 'max:150'], 			'locations_description_hr' => ['nullable', 'string', 'max:150'], 			'locations_description_bs' => ['nullable', 'string', 'max:150'], 			'locations_description_mk' => ['nullable', 'string', 'max:150'], 			'locations_description_sl' => ['nullable', 'string', 'max:150'], 			'locations_description_sr' => ['nullable', 'string', 'max:150'], 			'locations_description_fr' => ['nullable', 'string', 'max:150'], 			'locations_description_de' => ['nullable', 'string', 'max:150'], 			'departments' => ['array', 'required_if:department_answer_required,true'], 			'departments.*.title_en' => ['nullable', 'string', 'max:150'], 			'departments.*.title_hr' => ['nullable', 'string', 'max:150'], 			'departments.*.title_bs' => ['nullable', 'string', 'max:150'], 			'departments.*.title_mk' => ['nullable', 'string', 'max:150'], 			'departments.*.title_sl' => ['nullable', 'string', 'max:150'], 			'departments.*.title_sr' => ['nullable', 'string', 'max:150'], 			'departments.*.title_fr' => ['nullable', 'string', 'max:150'], 			'departments.*.title_de' => ['nullable', 'string', 'max:150'], 			'departments_description_en' => ['nullable', 'string', 'max:150'], 			'departments_description_hr' => ['nullable', 'string', 'max:150'], 			'departments_description_bs' => ['nullable', 'string', 'max:150'], 			'departments_description_mk' => ['nullable', 'string', 'max:150'], 			'departments_description_sl' => ['nullable', 'string', 'max:150'], 			'departments_description_sr' => ['nullable', 'string', 'max:150'], 			'departments_description_fr' => ['nullable', 'string', 'max:150'], 			'departments_description_de' => ['nullable', 'string', 'max:150'],  			'draft' => ['boolean'], 			'client_comment' => ['nullable', 'string', 'max:200'], 			'include_demographic_questions' => ['boolean'], 			'send_codes_via_email' => ['boolean'],  			// QUESTIONS VALIDATION 			'extra_questions.*' => ['nullable', 'array'], 			'extra_questions.*.code' => ['nullable', 'string', 'max:250'],  			'extra_questions.*.title_en' => ['required', 'string', 'max:250'], 			'extra_questions.*.title_hr' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.title_bs' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.title_mk' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.title_sl' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.title_sr' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.title_fr' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.title_de' => ['nullable', 'string', 'max:250'],  			'extra_questions.*.description_en' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_hr' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_bs' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_mk' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_sl' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_sr' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_fr' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.description_de' => ['nullable', 'string', 'max:250'],  			'extra_questions.*.available_answers' => ['nullable', 'array', 'bail', new ValidateCustomRadioAvailableAnswers($this->extra_questions)], 			'extra_questions.*.available_answers.available_answers_en' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_hr' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_bs' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_mk' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_sl' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_sr' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_fr' => ['sometimes', 'array'], 			'extra_questions.*.available_answers.available_answers_de' => ['sometimes', 'array'],  			'extra_questions.*.available_answers.available_answers_en.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_hr.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_bs.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_mk.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_sl.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_sr.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_fr.*' => ['nullable', 'string', 'max:250'], 			'extra_questions.*.available_answers.available_answers_de.*' => ['nullable', 'string', 'max:250'],  			'extra_questions.*.allowed_comments' => ['required', 'boolean'], 			'extra_questions.*.ordering' => ['required', 'integer', 'min:0', 'max:65535'], 			'extra_questions.*.required' => ['required', 'boolean'], 			'extra_questions.*.type' => ['required', 'integer', new Enum(QuestionType::class)],  			'demographic_questions' => ['array', 'required_if:include_demographic_questions,true'], 			'demographic_questions.*' => ['required', 'uuid', 'exists:' . Question::class . ',id', Rule::exists(Question::class, 'id')->where(function ($query) { 				$query->where('class', QuestionClass::Demographic->value); 			})], 			'demographic_answers_required' => ['boolean'], 			'demographic_first' => ['boolean', Rule::prohibitedIf($this->demographic_first && ($this->locations_first || $this->departments_first))], 			'departments_first' => ['boolean', Rule::prohibitedIf($this->departments_first && ($this->demographic_first || $this->locations_first))], 			'locations_first' => ['boolean', Rule::prohibitedIf($this->locations_first && ($this->departments_first || $this->demographic_first))], 		]; 	}