#!/usr/bin/env nu

# VAPORA Deployment Validation Script
# Validates that all deployment files and artifacts are ready

def main [] {
    print $"(ansi green)🔍 VAPORA Deployment Validation(ansi reset)"
    print $"(ansi blue)═══════════════════════════════════════════════(ansi reset)"
    print ""

    mut all_valid = true

    # Check Dockerfiles
    print $"(ansi yellow)🐳 Checking Dockerfiles...(ansi reset)"
    let dockerfiles = [
        "crates/vapora-backend/Dockerfile"
        "crates/vapora-frontend/Dockerfile"
        "crates/vapora-agents/Dockerfile"
        "crates/vapora-mcp-server/Dockerfile"
    ]

    for dockerfile in $dockerfiles {
        if ($dockerfile | path exists) {
            print $"  (ansi green)✅ ($dockerfile)(ansi reset)"
        } else {
            print $"  (ansi red)❌ ($dockerfile) NOT FOUND(ansi reset)"
            $all_valid = false
        }
    }

    # Check Kubernetes manifests
    print ""
    print $"(ansi yellow)☸️  Checking Kubernetes manifests...(ansi reset)"
    let k8s_manifests = [
        "kubernetes/00-namespace.yaml"
        "kubernetes/01-surrealdb.yaml"
        "kubernetes/02-nats.yaml"
        "kubernetes/03-secrets.yaml"
        "kubernetes/04-backend.yaml"
        "kubernetes/05-frontend.yaml"
        "kubernetes/06-agents.yaml"
        "kubernetes/07-mcp-server.yaml"
        "kubernetes/08-ingress.yaml"
    ]

    for manifest in $k8s_manifests {
        if ($manifest | path exists) {
            print $"  (ansi green)✅ ($manifest)(ansi reset)"
        } else {
            print $"  (ansi red)❌ ($manifest) NOT FOUND(ansi reset)"
            $all_valid = false
        }
    }

    # Check deployment scripts
    print ""
    print $"(ansi yellow)📜 Checking deployment scripts...(ansi reset)"
    let scripts = [
        "scripts/build-docker.nu"
        "scripts/deploy-k8s.nu"
        "scripts/validate-provisioning.nu"
    ]

    for script in $scripts {
        if ($script | path exists) {
            print $"  (ansi green)✅ ($script)(ansi reset)"
        } else {
            print $"  (ansi red)❌ ($script) NOT FOUND(ansi reset)"
            $all_valid = false
        }
    }

    # Check documentation
    print ""
    print $"(ansi yellow)📚 Checking documentation...(ansi reset)"
    let docs = [
        "README.md"
        "DEPLOYMENT.md"
        "PROJECT_COMPLETION_REPORT.md"
        "kubernetes/README.md"
        "provisioning-integration/README.md"
    ]

    for doc in $docs {
        if ($doc | path exists) {
            print $"  (ansi green)✅ ($doc)(ansi reset)"
        } else {
            print $"  (ansi red)❌ ($doc) NOT FOUND(ansi reset)"
            $all_valid = false
        }
    }

    # Check source code (binaries for health endpoints)
    print ""
    print $"(ansi yellow)🔧 Checking health endpoint implementations...(ansi reset)"
    let source_files = [
        "crates/vapora-backend/src/api/health.rs"
        "crates/vapora-agents/src/bin/server.rs"
        "crates/vapora-mcp-server/src/main.rs"
    ]

    for file in $source_files {
        if ($file | path exists) {
            print $"  (ansi green)✅ ($file)(ansi reset)"
        } else {
            print $"  (ansi red)❌ ($file) NOT FOUND(ansi reset)"
            $all_valid = false
        }
    }

    # Summary
    print ""
    print $"(ansi blue)═══════════════════════════════════════════════(ansi reset)"

    if $all_valid {
        print $"(ansi green)✅ ALL VALIDATION CHECKS PASSED!(ansi reset)"
        print ""
        print $"(ansi cyan)VAPORA v2.0 is ready for deployment.(ansi reset)"
        print ""
        print $"(ansi yellow)Next steps:(ansi reset)"
        print "  1. Build Docker images: nu scripts/build-docker.nu --push"
        print "  2. Update secrets: Edit kubernetes/03-secrets.yaml"
        print "  3. Update ingress: Edit kubernetes/08-ingress.yaml"
        print "  4. Deploy: nu scripts/deploy-k8s.nu"
        print ""
        print $"(ansi cyan)Documentation:(ansi reset)"
        print "  • Deployment Guide: DEPLOYMENT.md"
        print "  • K8s README: kubernetes/README.md"
        print "  • Project Summary: PROJECT_COMPLETION_REPORT.md"
        exit 0
    } else {
        print $"(ansi red)❌ VALIDATION FAILED - Some files are missing(ansi reset)"
        print ""
        print $"(ansi yellow)Please ensure all required files are present before deployment.(ansi reset)"
        exit 1
    }
}
