// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

use crate::sdk::strip_tool_path;
use failure::{bail, Error, ResultExt};
use std::path::PathBuf;
use std::process::Command;
use std::time::Duration;
use uname::uname;

#[allow(dead_code)]
pub fn duration_as_milliseconds(duration: &Duration) -> u64 {
    let subsec_ms: u64 = u64::from(duration.subsec_nanos()) / 1_000_000;
    duration.as_secs() * 1000 + subsec_ms
}

pub fn is_mac() -> bool {
    uname().unwrap().sysname == "Darwin"
}

pub fn strip_binary(binary: &PathBuf) -> Result<PathBuf, Error> {
    let file_name = binary.file_name().unwrap();
    let new_file_name = file_name.to_string_lossy().into_owned() + "_stripped";
    let target_path = binary.parent().unwrap().join(new_file_name);
    let strip_result = Command::new(strip_tool_path()?)
        .arg("-strip-all")
        .arg(binary)
        .arg(&target_path)
        .status()
        .context("strip command failed to start")?;

    if !strip_result.success() {
        bail!("strip failed with error {:?}", strip_result);
    }

    Ok(target_path)
}
