use fastly::{Error, Request, Response};
use std::collections::HashMap;

#[fastly::main]
fn main(mut req: Request) -> Result<Response, Error> {
    if let Some(cookie) = req.get_header("Cookie"){
        println!("Original Cookie header: {}", cookie.to_str().unwrap());

        //put cookie value into a map
        let mut map = HashMap::new();
        for item in cookie.to_str().unwrap().split("; ") {
            let parts: Vec<&str> = item.split('=').collect();
            map.insert(parts[0].trim().to_string(), parts[1].trim().to_string());
        }

        //filter cookie value
        let mut filtered_cookie_header_value = "".to_string();
        if let Some(value) = map.get("name2") {
            filtered_cookie_header_value.push_str(&format!("{}{}", "name2=", value));
        }
        if let Some(value) = map.get("name3") {
            filtered_cookie_header_value.push_str(&format!(";{}{}", "name3=", value));
        }
        if let Some(value) = map.get("name6") {
            filtered_cookie_header_value.push_str(&format!(";{}{}", "name6=", value));
        }
        
        // Clear the original Cookie header
        req.remove_header("Cookie");

        // Overwrite the incoming Cookie header with the filtered values:
        // cookies (key=value) are separated with ";"     
        req.set_header("Cookie", &filtered_cookie_header_value);
        println!("Filtered Cookie header: {}", &filtered_cookie_header_value);

    }
    let beresp = req.send("origin_0")?;

    Ok(beresp)
}