// =====================================================
// NEO4J SCHEMA FROM POSTGRESQL DATA
// Price-focused migration from existing PostgreSQL database
// =====================================================

// Clear existing data
MATCH (n) DETACH DELETE n;

// =====================================================
// CREATE CONSTRAINTS AND INDEXES
// =====================================================

// Create uniqueness constraints
CREATE CONSTRAINT price_tier_name_unique IF NOT EXISTS FOR (p:PriceTier) REQUIRE p.tier_name IS UNIQUE;
CREATE CONSTRAINT technology_name_unique IF NOT EXISTS FOR (t:Technology) REQUIRE t.name IS UNIQUE;
CREATE CONSTRAINT tool_name_unique IF NOT EXISTS FOR (tool:Tool) REQUIRE tool.name IS UNIQUE;
CREATE CONSTRAINT stack_name_unique IF NOT EXISTS FOR (s:TechStack) REQUIRE s.name IS UNIQUE;

// Create indexes for performance
CREATE INDEX price_tier_range_idx IF NOT EXISTS FOR (p:PriceTier) ON (p.min_price_usd, p.max_price_usd);
CREATE INDEX tech_category_idx IF NOT EXISTS FOR (t:Technology) ON (t.category);
CREATE INDEX tech_cost_idx IF NOT EXISTS FOR (t:Technology) ON (t.monthly_cost_usd);
CREATE INDEX tool_category_idx IF NOT EXISTS FOR (tool:Tool) ON (tool.category);
CREATE INDEX tool_cost_idx IF NOT EXISTS FOR (tool:Tool) ON (tool.monthly_cost_usd);

// =====================================================
// PRICE TIER NODES (from PostgreSQL price_tiers table)
// =====================================================

// These will be populated from PostgreSQL data
// Structure matches PostgreSQL price_tiers table:
// - id, tier_name, min_price_usd, max_price_usd, target_audience, typical_project_scale, description

// =====================================================
// TECHNOLOGY NODES (from PostgreSQL technology tables)
// =====================================================

// These will be populated from PostgreSQL data
// Categories: frontend_technologies, backend_technologies, database_technologies, 
//            cloud_technologies, testing_technologies, mobile_technologies, 
//            devops_technologies, ai_ml_technologies

// =====================================================
// TOOL NODES (from PostgreSQL tools table)
// =====================================================

// These will be populated from PostgreSQL data
// Structure matches PostgreSQL tools table with pricing:
// - id, name, category, description, monthly_cost_usd, setup_cost_usd, 
//   price_tier_id, total_cost_of_ownership_score, price_performance_ratio

// =====================================================
// TECH STACK NODES (will be generated from combinations)
// =====================================================

// These will be dynamically created based on:
// - Price tier constraints
// - Technology compatibility
// - Budget optimization
// - Domain requirements

// =====================================================
// RELATIONSHIP TYPES
// =====================================================

// Price-based relationships
// - [:BELONGS_TO_TIER] - Technology/Tool belongs to price tier
// - [:WITHIN_BUDGET] - Technology/Tool fits within budget range
// - [:COST_OPTIMIZED] - Optimal cost-performance ratio

// Technology relationships
// - [:COMPATIBLE_WITH] - Technology compatibility
// - [:USES_FRONTEND] - Stack uses frontend technology
// - [:USES_BACKEND] - Stack uses backend technology
// - [:USES_DATABASE] - Stack uses database technology
// - [:USES_CLOUD] - Stack uses cloud technology
// - [:USES_TESTING] - Stack uses testing technology
// - [:USES_MOBILE] - Stack uses mobile technology
// - [:USES_DEVOPS] - Stack uses devops technology
// - [:USES_AI_ML] - Stack uses AI/ML technology

// Tool relationships
// - [:RECOMMENDED_FOR] - Tool recommended for domain/use case
// - [:INTEGRATES_WITH] - Tool integrates with technology
// - [:SUITABLE_FOR] - Tool suitable for price tier

// =====================================================
// PRICE-BASED QUERIES (examples)
// =====================================================

// Query 1: Find technologies within budget
// MATCH (t:Technology)-[:BELONGS_TO_TIER]->(p:PriceTier)
// WHERE $budget >= p.min_price_usd AND $budget <= p.max_price_usd
// RETURN t, p ORDER BY t.total_cost_of_ownership_score DESC

// Query 2: Find optimal tech stack for budget
// MATCH (frontend:Technology {category: "frontend"})-[:BELONGS_TO_TIER]->(p1:PriceTier)
// MATCH (backend:Technology {category: "backend"})-[:BELONGS_TO_TIER]->(p2:PriceTier)
// MATCH (database:Technology {category: "database"})-[:BELONGS_TO_TIER]->(p3:PriceTier)
// MATCH (cloud:Technology {category: "cloud"})-[:BELONGS_TO_TIER]->(p4:PriceTier)
// WHERE (frontend.monthly_cost_usd + backend.monthly_cost_usd + 
//        database.monthly_cost_usd + cloud.monthly_cost_usd) <= $budget
// RETURN frontend, backend, database, cloud, 
//        (frontend.monthly_cost_usd + backend.monthly_cost_usd + 
//         database.monthly_cost_usd + cloud.monthly_cost_usd) as total_cost
// ORDER BY total_cost ASC, 
//          (frontend.total_cost_of_ownership_score + backend.total_cost_of_ownership_score + 
//           database.total_cost_of_ownership_score + cloud.total_cost_of_ownership_score) DESC

// Query 3: Find tools for specific price tier
// MATCH (tool:Tool)-[:BELONGS_TO_TIER]->(p:PriceTier {tier_name: $tier_name})
// RETURN tool ORDER BY tool.price_performance_ratio DESC

// =====================================================
// COMPLETION STATUS
// =====================================================

RETURN "✅ Neo4j Schema Ready for PostgreSQL Migration!" as status,
       "🎯 Focus: Price-based relationships from existing PostgreSQL data" as focus,
       "📊 Ready for data migration and relationship creation" as ready_state;
