import { Interface } from "../schema/mode/interfaces/Interface";

console.log("🚀 REVOLUTIONARY CLEAN SYNTAX TEST");
console.log("==================================\n");

// 🎯 ZERO IMPORTS NEEDED - Just pure, clean syntax!
console.log("✨ No Make, no Mod, no complex imports - just pure syntax!");

// 1. Union Types with Pipe Syntax (like TypeScript!)
console.log("\n1️⃣ Union Types with Pipe Syntax");
const StatusSchema = Interface({
    status: "active|inactive|pending",        // ✅ Clean union syntax!
    priority: "low|medium|high",              // ✅ No Make.union() needed!
    type: "user|admin|guest"                  // ✅ Pure TypeScript-like syntax!
});

const statusResult = StatusSchema.safeParse({
    status: "active",
    priority: "high",
    type: "admin"
});

console.log("✅ Union validation:", statusResult.success);
if (statusResult.success) {
    console.log("   Data:", statusResult.data);
}

// 2. Constant Values with Equals Syntax
console.log("\n2️⃣ Constant Values with Equals Syntax");
const ConfigSchema = Interface({
    version: "=1.0",                          // ✅ Clean constant syntax!
    environment: "=production",               // ✅ No Make.const() needed!
    debug: "=false",                          // ✅ Boolean constants!
    maxUsers: "=1000"                         // ✅ Number constants!
});

const configResult = ConfigSchema.safeParse({
    version: 1.0,                             // ✅ Number to match =1.0
    environment: "production",                // ✅ String to match =production
    debug: false,                             // ✅ Boolean to match =false
    maxUsers: 1000                            // ✅ Number to match =1000
});

console.log("✅ Constant validation:", configResult.success);
if (configResult.success) {
    console.log("   Config data:", configResult.data);
}

// 3. Mixed Clean Syntax - The Ultimate Test
console.log("\n3️⃣ Mixed Clean Syntax - The Ultimate Test");
const UltimateSchema = Interface({
    // Basic types (already clean)
    id: "positive",
    email: "email",
    name: "string(2,50)",
    age: "int(18,120)?",

    // Revolutionary clean syntax
    role: "user|admin|moderator",             // ✅ Union without imports
    status: "active|inactive",                // ✅ Clean unions
    type: "=premium",                         // ✅ Constant without imports
    plan: "=enterprise",                      // ✅ Clean constants

    // Arrays and constraints (already clean)
    tags: "string[](1,10)?",
    scores: "number(0,100)[]?",

    // Nested objects (already clean)
    profile: {
        bio: "string(,500)?",
        theme: "light|dark",                  // ✅ Nested unions!
        notifications: "=true"                // ✅ Nested constants!
    }
});

const ultimateResult = UltimateSchema.safeParse({
    id: 1,
    email: "user@example.com",
    name: "John Doe",
    age: 30,
    role: "admin",
    status: "active",
    type: "premium",
    plan: "enterprise",
    tags: ["developer", "typescript"],
    scores: [95, 87, 92],
    profile: {
        bio: "Full-stack developer",
        theme: "dark",
        notifications: true
    }
});

console.log("✅ Ultimate validation:", ultimateResult.success);
if (ultimateResult.success) {
    console.log("   Ultimate data keys:", Object.keys(ultimateResult.data));
    console.log("   Profile theme:", ultimateResult.data.profile.theme);
}

// 4. Error Testing - Show clean error messages
console.log("\n4️⃣ Error Testing - Clean Error Messages");
const errorResult = StatusSchema.safeParse({
    status: "invalid" as any,                 // ❌ Invalid union value (bypassing TS for demo)
    priority: "urgent" as any,                // ❌ Invalid union value (bypassing TS for demo)
    type: "superuser" as any                  // ❌ Invalid union value (bypassing TS for demo)
});

console.log("❌ Error validation:", errorResult.success);
if (!errorResult.success) {
    console.log("   Clean error messages:");
    errorResult.errors.forEach((error, index) => {
        console.log(`   ${index + 1}. ${error}`);
    });
}

console.log("\n🎉 REVOLUTIONARY CLEAN SYNTAX COMPLETE!");
console.log("=======================================");
console.log("✅ Union Types: 'active|inactive|pending' (no Make.union!)");
console.log("✅ Constants: '=admin' (no Make.const!)");
console.log("✅ Arrays: 'string[](1,10)' (already clean!)");
console.log("✅ Constraints: 'string(2,50)' (already clean!)");
console.log("✅ Optional: 'string?' (already clean!)");
console.log("✅ Nested: Full object nesting support!");
console.log("\n🚀 ZERO imports needed - just pure, intuitive syntax!");
