<?php

namespace Tests\Unit;

use App\Services\EmployeeImportService;
use App\Support\EmployeeValidation;
use Illuminate\Support\Facades\Validator;
use Tests\TestCase;

class EmployeeImportTemplateTest extends TestCase
{
    public function test_template_sample_row_aligns_with_headers_and_passes_import_rules(): void
    {
        $service = app(EmployeeImportService::class);
        $headers = $service->templateHeaders();
        $sample = $service->templateSampleRow();

        $this->assertSame(count($headers), count($sample), 'Sample row must have one value per header column.');

        $payload = EmployeeValidation::normalize(array_combine($headers, $sample) ?: []);
        $rules = EmployeeValidation::importRules(null);
        // Avoid DB-backed uniqueness checks in this unit test.
        $rules['email'] = ['required', 'email', 'max:191'];
        $rules['employee_number'] = ['nullable', 'string', 'max:50'];

        $validator = Validator::make($payload, $rules, EmployeeValidation::messages());

        $this->assertFalse($validator->fails(), $validator->errors()->toJson());
        $this->assertSame('male', $payload['gender']);
        $this->assertSame('ABCD0123456', $payload['ifsc_code']);
        $this->assertSame('ABCDE1234F', $payload['pan_number']);
        $this->assertSame('Engineering', $payload['department']);
        $this->assertSame('Senior Developer', $payload['designation']);
        $this->assertSame('employee@example.com', $payload['report_to']);
    }
}
