import { Interface } from "../schema/mode/interfaces/Interface";
import { ConditionalSyntaxUtils } from "../schema/extensions/components/ConditionalValidation/utils/SyntaxParser";

console.log("🔍 DETAILED DEBUG: Conditional Logic");
console.log("====================================\n");

// Test the syntax parser directly
console.log("1. Testing syntax parser...");
const parsedConfig = ConditionalSyntaxUtils.parse("when:role=admin:string[]:string[]?");
console.log("Parsed config:", JSON.stringify(parsedConfig, null, 2));

if (parsedConfig && parsedConfig.conditions) {
    console.log("Conditions found:", parsedConfig.conditions.length);
    parsedConfig.conditions.forEach((condition: any, index: number) => {
        console.log(`Condition ${index}:`, {
            hasConditionFunction: typeof condition.condition === 'function',
            schema: condition.schema
        });
        
        // Test the condition function
        if (typeof condition.condition === 'function') {
            console.log(`  Testing condition with 'admin':`, condition.condition('admin'));
            console.log(`  Testing condition with 'user':`, condition.condition('user'));
        }
    });
}

console.log("\n2. Testing schema validation...");

const TestSchema = Interface({
    role: "admin|user",
    permissions: "when:role=admin:string[]:string[]?"
});

// Test case that should fail
const testData = {
    role: "user",
    permissions: ["read"] // This should fail
};

console.log("Test data:", testData);
const result = TestSchema.safeParse(testData);
console.log("Validation result:", result.success);
if (!result.success) {
    console.log("Errors:", result.errors);
} else {
    console.log("❌ This should have failed!");
}

console.log("\n3. Manual condition evaluation...");
if (parsedConfig && parsedConfig.conditions && parsedConfig.conditions[0]) {
    const condition = parsedConfig.conditions[0];
    const roleValue = testData.role;
    const conditionResult = condition.condition(roleValue);
    console.log(`Condition function(${roleValue}):`, conditionResult);
    console.log("Expected schema:", conditionResult ? condition.schema : parsedConfig.default);
}
