use cairo::{Context, Path};

pub fn hexagon_path(
    context: &Context,
    translate_x: f64,
    translate_y: f64,
    width: f64,
    height: f64,
) -> Path {
    context.new_path();
    let points = hexagon(width, height);
    context.move_to(translate_x + points[0].0, translate_y + points[0].1);
    context.line_to(translate_x + points[1].0, translate_y + points[1].1);
    context.line_to(translate_x + points[2].0, translate_y + points[2].1);
    context.line_to(translate_x + points[3].0, translate_y + points[3].1);
    context.line_to(translate_x + points[4].0, translate_y + points[4].1);
    context.line_to(translate_x + points[5].0, translate_y + points[5].1);
    context.copy_path().expect("to successfully copy a path")
}

pub fn hexagon(width: f64, height: f64) -> Vec<(f64, f64)> {
    let center_x = width / 2.;
    let center_y = height / 2.;
    let radius = width / 2.;

    vec![
        (center_x + radius, center_y),
        (
            center_x + radius / 2.,
            center_y + (3_f64).sqrt() * radius / 2.,
        ),
        (
            center_x - radius / 2.,
            center_y + (3_f64).sqrt() * radius / 2.,
        ),
        (center_x - radius, center_y),
        (
            center_x - radius / 2.,
            center_y - (3_f64).sqrt() * radius / 2.,
        ),
        (
            center_x + radius / 2.,
            center_y - (3_f64).sqrt() * radius / 2.,
        ),
    ]
}
