use std::env;
use std::io::Read;
use std::net::{TcpListener, TcpStream};

fn handle_client(stream: &mut TcpStream) -> std::io::Result<()> {
    println!("---> handling stream {:?}", stream);
    let mut buf = [0; 1024];
    let n = stream.read(&mut buf[..])?;
    let req = std::str::from_utf8(&buf[..n]);
    match req {
        Ok(s) => {
            println!("---> first {} bytes: {:?}", n, s);
            Ok(())
        }
        Err(e) => {
            println!("---> oh no {:?}", e);
            Ok(())
        }
    }
}

fn main() -> std::io::Result<()> {
    let mut addr = String::from("127.0.0.1:19721");
    if let Ok(v) = env::var("ADDR") {
        addr = String::from(v.as_str());
    }

    println!("listening at {}", addr);
    let listener = TcpListener::bind(addr)?;

    for stream in listener.incoming() {
        if let Ok(_) = handle_client(&mut stream?) {
            println!("---> looks like that went well")
        }
    }
    Ok(())
}
