import { Interface, Make, Mod, Smart, When, Live, Docs, Quick } from "../..";

console.log("🚀 REVOLUTIONARY FEATURES SHOWCASE");
console.log("===================================\n");

// 1. Smart Schema Inference
console.log("1️⃣ Smart Schema Inference");
console.log("-------------------------");

const sampleUser = {
    id: 1,
    email: "user@example.com",
    name: "John Doe",
    age: 30,
    tags: ["developer", "typescript"],
    website: "https://johndoe.com",
    uuid: "550e8400-e29b-41d4-a716-446655440000"
};

const inferredSchema = Smart.fromSample(sampleUser);
console.log("✨ Inferred schema from sample:", JSON.stringify(inferredSchema, null, 2));

// 2. Conditional Validation
console.log("\n2️⃣ Conditional Validation");
console.log("-------------------------");

const ConditionalUserSchema = Interface({
    accountType: Make.union("free", "premium", "enterprise"),
    email: "email",
    name: "string",

    // Revolutionary conditional validation
    maxProjects: When.field("accountType")
        .is("free").then("int(1,3)")
        .is("premium").then("int(1,50)")
        .is("enterprise").then("int(1,)")
        .default("int(1,1)"),

    paymentMethod: When.field("accountType")
        .isNot("free").then("string")
        .default("string?")
});

console.log("✨ Conditional schema created with dependent validation");

// 3. Schema Inheritance
console.log("\n3️⃣ Schema Inheritance");
console.log("--------------------");

const BaseEntitySchema = Interface({
    id: "uuid",
    createdAt: "date",
    updatedAt: "date"
});

// const ExtendedUserSchema = When.extend.from(BaseEntitySchema).with({
//     email: "email",
//     username: "string(3,20)",
//     profile: {
//         firstName: "string",
//         lastName: "string",
//         bio: "string(,500)?"
//     }
// }).override({
//     id: "positive" // Override with more specific validation
// });

console.log("✨ Extended schema with inheritance created");

// 4. Real-time Validation
console.log("\n4️⃣ Real-time Validation");
console.log("----------------------");

const UserSchema = Interface({
    email: "email",
    username: "string(3,20)",
    password: "string(8,)"
});

const liveValidator = Live.validator(UserSchema);

// Simulate real-time field validation
liveValidator.onValidation((result) => {
    console.log("📡 Live validation result:", {
        isValid: result.isValid,
        errorCount: Object.keys(result.errors).length
    });
});

// Validate fields one by one
console.log("✨ Validating fields in real-time...");
liveValidator.validateField('email', 'user@example.com');
liveValidator.validateField('username', 'johndoe');
liveValidator.validateField('password', 'securepass123');

// 5. Auto Documentation
console.log("\n5️⃣ Auto Documentation");
console.log("---------------------");

const documentation = Docs.generate(UserSchema, {
    title: "User API Schema",
    description: "Schema for user management endpoints",
    examples: true
});

console.log("✨ Generated documentation:");
console.log("📄 Markdown length:", documentation.markdown.length, "chars");
console.log("🌐 HTML length:", documentation.html.length, "chars");
console.log("📋 OpenAPI spec generated");

// Generate TypeScript definitions
const typeDefinitions = Docs.typescript(UserSchema, {
    exportName: "User",
    namespace: "API"
});

console.log("📝 TypeScript definitions:");
console.log(typeDefinitions);

// 6. Quick Access Utilities
console.log("\n6️⃣ Quick Access Utilities");
console.log("------------------------");

// Quick inference
const quickSchema = Quick.fromSample({
    id: 123,
    name: "Quick Test",
    active: true
});

console.log("⚡ Quick schema inference:", JSON.stringify(quickSchema, null, 2));

// Quick documentation
const quickDocs = Quick.docs(UserSchema, { title: "Quick Docs" });
console.log("⚡ Quick documentation generated");

console.log("\n🎉 REVOLUTIONARY FEATURES SHOWCASE COMPLETE!");
console.log("============================================");
console.log("✅ Smart Inference - Automatic schema generation");
console.log("✅ Conditional Validation - Dependent field validation");
console.log("✅ Real-time Validation - Live reactive validation");
console.log("✅ Auto Documentation - Markdown, HTML, OpenAPI, TypeScript");
console.log("✅ Schema Inheritance - Extend and override schemas");
console.log("✅ Quick Utilities - Easy access to common features");
console.log("\n🚀 Fortify Schema is now the most revolutionary validation library!");
