#![allow(missing_docs)]

use glam::DVec2;
use road_parceling::{subdivide_all, RoadGraph, SubdivisionParams};

fn main() {
    let r = 100.0;
    let third = std::f64::consts::TAU / 3.0;
    let mut g = RoadGraph::new();
    let center = g.add_node(DVec2::new(0.0, 0.0));
    let p1 = g.add_node(DVec2::new(r * 0.0_f64.cos(), r * 0.0_f64.sin()));
    let p2 = g.add_node(DVec2::new(r * third.cos(), r * third.sin()));
    let p3 = g.add_node(DVec2::new(r * (2.0 * third).cos(), r * (2.0 * third).sin()));
    g.add_road(center, p1).unwrap();
    g.add_road(center, p2).unwrap();
    g.add_road(center, p3).unwrap();
    g.add_road(p1, p2).unwrap();
    g.add_road(p2, p3).unwrap();
    g.add_road(p3, p1).unwrap();
    g.rebuild_topology().unwrap();
    let params = SubdivisionParams::default();
    let parcels = subdivide_all(&g, &params).unwrap();
    println!("p1 = {:?}", g.node_position(p1));
    println!("p2 = {:?}", g.node_position(p2));
    println!("p3 = {:?}", g.node_position(p3));
    println!("center = {:?}", g.node_position(center));
    println!("\n{} parcels:", parcels.len());
    for (i, (id, p)) in parcels.iter().enumerate() {
        println!(
            "  [{}] id={:?} centroid={:?} verts={:?}",
            i,
            id,
            p.polygon().centroid(),
            p.vertices()
        );
    }
}
