<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class UpdateTenantRequest extends FormRequest
{
    /**
     * 인증 확인
     */
    public function authorize(): bool
    {
        return auth()->check();
    }

    /**
     * 유효성 검증 규칙
     */
    public function rules(): array
    {
        $tenantId = $this->route('id');

        return [
            // 기본 정보 (필수)
            'company_name' => ['required', 'string', 'max:100'],
            'code' => [
                'required',
                'string',
                'max:50',
                Rule::unique('tenants', 'code')->ignore($tenantId),
            ],
            'email' => ['nullable', 'email', 'max:100'],
            'phone' => ['nullable', 'string', 'max:20'],

            // 회사 정보
            'business_num' => ['nullable', 'string', 'max:20'],
            'corp_reg_no' => ['nullable', 'string', 'max:20'],
            'ceo_name' => ['nullable', 'string', 'max:50'],
            'address' => ['nullable', 'string', 'max:255'],
            'homepage' => ['nullable', 'url', 'max:255'],
            'fax' => ['nullable', 'string', 'max:20'],

            // 구독 정보
            'tenant_st_code' => ['required', 'string', 'in:trial,active,suspended,expired'],
            'tenant_type' => ['required', 'string', 'in:STD,TPL,HQ'],
            'billing_tp_code' => ['nullable', 'string', 'in:monthly,yearly,free'],
            'max_users' => ['nullable', 'integer', 'min:1'],
            'trial_ends_at' => ['nullable', 'date'],
            'expires_at' => ['nullable', 'date'],
            'last_paid_at' => ['nullable', 'date'],

            // 관리 메모
            'admin_memo' => ['nullable', 'string'],
        ];
    }

    /**
     * 유효성 검증 메시지
     */
    public function messages(): array
    {
        return [
            'company_name.required' => '회사명은 필수입니다.',
            'company_name.max' => '회사명은 최대 100자까지 입력 가능합니다.',
            'code.required' => '테넌트 코드는 필수입니다.',
            'code.unique' => '이미 사용 중인 테넌트 코드입니다.',
            'email.email' => '올바른 이메일 형식이 아닙니다.',
            'homepage.url' => '올바른 URL 형식이 아닙니다.',
            'tenant_st_code.required' => '상태는 필수입니다.',
            'tenant_st_code.in' => '올바른 상태를 선택해주세요.',
            'tenant_type.required' => '테넌트 유형은 필수입니다.',
            'tenant_type.in' => '올바른 테넌트 유형을 선택해주세요.',
            'billing_tp_code.in' => '올바른 결제 유형을 선택해주세요.',
            'max_users.integer' => '최대 사용자 수는 숫자여야 합니다.',
            'max_users.min' => '최대 사용자 수는 최소 1명 이상이어야 합니다.',
        ];
    }

    /**
     * 필드명 한글화
     */
    public function attributes(): array
    {
        return [
            'company_name' => '회사명',
            'code' => '테넌트 코드',
            'email' => '이메일',
            'phone' => '전화번호',
            'business_num' => '사업자등록번호',
            'corp_reg_no' => '법인등록번호',
            'ceo_name' => '대표자명',
            'address' => '주소',
            'homepage' => '홈페이지',
            'fax' => '팩스',
            'tenant_st_code' => '상태',
            'tenant_type' => '테넌트 유형',
            'billing_tp_code' => '결제 유형',
            'max_users' => '최대 사용자 수',
            'trial_ends_at' => '트라이얼 종료일',
            'expires_at' => '구독 만료일',
            'last_paid_at' => '마지막 결제일',
            'admin_memo' => '관리자 메모',
        ];
    }
}
