<?php

use App\Services\Intune\DefaultPolicyNormalizer;
use App\Services\Intune\PolicyNormalizer;
use App\Services\Intune\PolicyTypeNormalizer;

it('routes to the first matching policy type normalizer', function () {
    $defaultNormalizer = app(DefaultPolicyNormalizer::class);

    $customNormalizer = new class implements PolicyTypeNormalizer
    {
        public function supports(string $policyType): bool
        {
            return $policyType === 'deviceCompliancePolicy';
        }

        public function normalize(?array $snapshot, string $policyType, ?string $platform = null): array
        {
            return [
                'status' => 'custom',
                'settings' => [],
                'warnings' => [],
            ];
        }

        public function flattenForDiff(?array $snapshot, string $policyType, ?string $platform = null): array
        {
            return ['custom' => true];
        }
    };

    $normalizer = new PolicyNormalizer($defaultNormalizer, [$customNormalizer]);

    $custom = $normalizer->normalize(['id' => 'policy-1'], 'deviceCompliancePolicy', 'windows');
    expect($custom['status'])->toBe('custom');

    $customDiff = $normalizer->flattenForDiff(['id' => 'policy-1'], 'deviceCompliancePolicy', 'windows');
    expect($customDiff)->toBe(['custom' => true]);

    $fallback = $normalizer->normalize(['id' => 'policy-1'], 'unknownPolicy', 'windows');
    expect($fallback['status'])->not->toBe('custom');
});
