<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;

// PRC-707 — Import çalıştırma / dry-run isteği. Yetki route middleware
// (permission:manage data imports) ile zorlanır.
class ImportRunRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'source' => ['required', 'string', 'in:csv,whmcs'],
            'entity' => ['required', 'string', 'in:clients,services,domains,invoices'],
            'dry_run' => ['nullable', 'boolean'],

            // CSV kaynağı: yüklü dosya (analyze aşamasında). Boyut + tip guard.
            'file' => ['required_if:source,csv', 'file', 'mimes:csv,txt', 'max:10240'],
            // Analyze sonrası kalıcı dosya referansı (batch uuid ile ilişkili).
            'file_token' => ['nullable', 'string', 'max:64'],

            // WHMCS DB bağlantısı (credential — LOGLANMAZ).
            'db_host' => ['required_if:source,whmcs', 'nullable', 'string', 'max:191'],
            'db_port' => ['nullable', 'integer', 'between:1,65535'],
            'db_name' => ['required_if:source,whmcs', 'nullable', 'string', 'max:191'],
            'db_user' => ['required_if:source,whmcs', 'nullable', 'string', 'max:191'],
            'db_password' => ['nullable', 'string', 'max:191'],
            'db_tls' => ['nullable', 'boolean'],

            // Alan eşleme: field => başlık/kolon adı.
            'mapping' => ['nullable', 'array'],
            'mapping.*' => ['nullable', 'string', 'max:191'],

            // Varsayılanlar.
            'default_group_id' => ['nullable', 'integer', 'exists:client_groups,id'],
            'default_currency_id' => ['nullable', 'integer', 'exists:currencies,id'],
            'default_language_id' => ['nullable', 'integer', 'exists:languages,id'],
        ];
    }
}
