use cursebreaker_parser::PlayerHouseDatabase; use std::env; fn main() -> Result<(), Box> { // Load all player houses from XML let cb_assets_path = env::var("CB_ASSETS_PATH").unwrap_or_else(|_| "/home/connor/repos/CBAssets".to_string()); let ph_db = PlayerHouseDatabase::load_from_xml( &format!("{}/Data/XMLs/PlayerHouses/PlayerHouses.xml", cb_assets_path), )?; println!("=== Player House Database Statistics ==="); println!("Total houses: {}", ph_db.len()); println!("Visible houses: {}", ph_db.get_visible_houses().len()); println!("Hidden houses: {}", ph_db.get_hidden_houses().len()); println!(); // Show all houses sorted by price println!("=== All Houses (sorted by price) ==="); let sorted = ph_db.get_sorted_by_price(); for house in &sorted { let visibility = if house.hidden { "(hidden)" } else { "" }; println!( " [{}] {} - {} gold {}", house.id, house.name, house.price, visibility ); } println!(); // Show price tiers println!("=== Houses by Price Tier ==="); println!("Free houses (tier 0):"); for house in ph_db.get_by_price_tier(0) { println!(" - {}", house.name); } println!("\nCheap houses (tier 1, < 5000 gold):"); for house in ph_db.get_by_price_tier(1) { println!(" - {} ({} gold)", house.name, house.price); } println!("\nModerate houses (tier 2, 5000-10000 gold):"); for house in ph_db.get_by_price_tier(2) { println!(" - {} ({} gold)", house.name, house.price); } println!("\nExpensive houses (tier 3, 10000+ gold):"); for house in ph_db.get_by_price_tier(3) { println!(" - {} ({} gold)", house.name, house.price); } println!(); // Show cheapest and most expensive println!("=== Price Extremes ==="); if let Some(cheapest) = ph_db.get_cheapest() { println!( "Cheapest house: {} - {} gold", cheapest.name, cheapest.price ); } if let Some(most_expensive) = ph_db.get_most_expensive() { println!( "Most expensive: {} - {} gold", most_expensive.name, most_expensive.price ); } println!(); // Show houses in a specific price range println!("=== Houses between 3000-5000 gold ==="); let mid_range = ph_db.get_by_price_range(3000, 5000); for house in mid_range { println!(" - {} ({} gold)", house.name, house.price); } println!(); // Show affordable houses println!("=== Affordable Houses (< 5000 gold) ==="); let affordable = ph_db.get_affordable_houses(); for house in &affordable { println!(" - {} ({} gold)", house.name, house.price); } println!("Total affordable: {}", affordable.len()); println!(); // Show details of a specific house if let Some(house) = ph_db.get_by_id(8) { println!("=== House Details (ID 8) ==="); println!("Name: {}", house.name); println!("Description: {}", house.description); println!("Price: {} gold", house.price); println!("Position: {}", house.position); if let Some((x, y, z)) = house.get_position() { println!("Coordinates: ({:.2}, {:.2}, {:.2})", x, y, z); } println!("Hidden: {}", house.hidden); println!("Price tier: {}", house.get_price_tier()); } Ok(()) }