use libnotcurses_sys::*;

fn main() -> NcResult<()> {
    let mut nc = Nc::new()?;

    // get the terminal size in character rows & columns
    let (t_rows, t_cols) = nc.term_dim_yx();

    // the standard plane has the same size
    let mut stdplane = nc.stdplane();
    assert_eq![(t_rows, t_cols), stdplane.dim_yx()];

    // set the standard plane's base cell's foreground and background colors
    let channels = NcChannels::from_rgb(0x88aa00, 0x222288);
    stdplane.set_base("x", 0, channels)?;
    rsleep![&mut nc, 0, 500];

    // add a green plane to the stdplane's pile
    let plane_green = NcPlane::new_bound(&mut stdplane, 0, 0, 16, 30)?;
    plane_green.set_base("·", 0, NcChannels::from_rgb(0x224411, 0x229922))?;
    rsleep![&mut nc, 0, 800];

    // add a smaller red plane, a bit displaced to the bottom right
    let plane_red = NcPlane::new_bound(&mut stdplane, 8, 12, 10, 20)?;
    plane_red.set_base("~", 0, NcChannels::from_rgb(0xaadd2b, 0x882222))?;
    rsleep![&mut nc, 0, 800];

    // write something
    plane_green.putstr("PLANE 11111")?;
    plane_red.putstr("PLANE 22222")?;
    rsleep![&mut nc, 0, 800];

    // move the green plane down
    for _ in 0..16 {
        plane_green.move_rel(1, 1)?;
        rsleep![&mut nc, 0, 30];
    }
    // and up
    for _ in 0..20 {
        plane_green.move_rel(-1, -1)?;
        rsleep![&mut nc, 0, 35];
    }

    // move the red plane right
    for _ in 0..26 {
        plane_red.move_rel(0, 1)?;
        rsleep![&mut nc, 0, 40];
    }
    sleep![1];

    // resize the red plane
    plane_red.resize_simple(14, 24)?;
    rsleep![&mut nc, 0, 300];
    plane_red.move_rel(-2, -2)?;
    rsleep![&mut nc, 0, 300];
    plane_red.resize_simple(8, 16)?;

    // TODO…

    rsleep![&mut nc, 3];

    nc.stop()?;
    Ok(())
}
