use anyhow::Result;
use std::{
    io::{BufRead, BufReader},
    net::IpAddr,
    str::FromStr,
};

pub fn get_dns_servers() -> Result<Vec<IpAddr>> {
    let mut addr_list = Vec::new();

    let f = std::fs::File::open("/etc/resolv.conf")?;
    for line in BufReader::new(f).lines() {
        let line = line?;
        let trimmed = line.trim();

        if trimmed.is_empty() || trimmed.starts_with('#') {
            continue;
        }

        let mut parts = trimmed.split_whitespace();
        if let Some(conf_option) = parts.next() {
            match conf_option {
                "nameserver" => {
                    if let Some(address) = parts.next() {
                        if let Ok(ip_addr) = IpAddr::from_str(address) {
                            addr_list.push(ip_addr);
                        }
                    }
                }
                _ => continue,
            }
        }
    }

    Ok(addr_list)
}