use core::str;
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
use crate::constants::{DEG2RAD, PI};
use crate::ext::{days2mdhms, jday};
use crate::propagation::sgp4init::{sgp4init, Sgp4InitOptions};
use crate::{DpperOpsMode, SatRec};
fn parse_float(str: &str) -> f64 {
return str.parse::<f64>().unwrap();
}
fn parse_int(str: &str) -> i32 {
return str.parse::<i32>().unwrap_or(0);
}
#[wasm_bindgen]
pub fn twoline2satrec(longstr1: &str, longstr2: &str) -> SatRec {
let opsmode = DpperOpsMode::I;
let xpdotp = 1440.0 / (2.0 * PI); let year;
let mut satrec = SatRec::new();
satrec.error = 0;
satrec.satnum = String::from(longstr1[2..7].trim());
satrec.epochyr = parse_int(longstr1[18..20].trim()) as u32;
satrec.epochdays = parse_float(longstr1[20..32].trim());
satrec.ndot = parse_float(longstr1[33..43].trim());
let temp = parse_int(longstr1[44..50].trim());
let temp2 = parse_float(longstr1[50..52].trim());
let nddot_str = format!("{}.{}E{}", 0, &temp.to_string(), &temp2.to_string());
satrec.nddot = parse_float(&nddot_str);
let bs_temp1 = parse_int(longstr1[53..54].trim());
let bs_temp2 = parse_int(longstr1[54..59].trim());
let bs_temp3 = parse_int(longstr1[59..61].trim());
let bstar_str = format!("{}.{}E{}", bs_temp1, bs_temp2, bs_temp3);
satrec.bstar = parse_float(&bstar_str);
satrec.inclo = parse_float(longstr2[8..16].trim());
satrec.nodeo = parse_float(longstr2[17..25].trim());
let ecco_str = format!("0.{}", longstr2[26..33].trim());
satrec.ecco = parse_float(&ecco_str);
satrec.argpo = parse_float(longstr2[34..42].trim());
satrec.mo = parse_float(longstr2[43..51].trim());
satrec.no = parse_float(longstr2[52..63].trim());
satrec.no /= xpdotp;
satrec.inclo *= DEG2RAD;
satrec.nodeo *= DEG2RAD;
satrec.argpo *= DEG2RAD;
satrec.mo *= DEG2RAD;
if satrec.epochyr < 57 {
year = satrec.epochyr + 2000;
} else {
year = satrec.epochyr + 1900;
}
let mdhms_result = days2mdhms(year, satrec.epochdays);
let mon = mdhms_result.month;
let day = mdhms_result.day;
let hour = mdhms_result.hour;
let minute = mdhms_result.minute;
let sec = mdhms_result.second;
satrec.jdsatepoch = jday(
year as f64,
mon as f64,
day as f64,
hour as f64,
minute as f64,
sec as f64,
0.0,
);
let satn = (satrec.satnum).parse::<f64>().unwrap();
let epoch = satrec.jdsatepoch - 2433281.5;
let xbstar = satrec.bstar;
let xecco = satrec.ecco;
let xargpo = satrec.argpo;
let xinclo = satrec.inclo;
let xmo = satrec.mo;
let xno = satrec.no;
let xnodeo = satrec.nodeo;
sgp4init(
&mut satrec,
Sgp4InitOptions {
opsmode,
satn: satn,
epoch,
xbstar,
xecco,
xargpo,
xinclo,
xmo,
xno,
xnodeo,
},
);
satrec
}