use crate::{rfam::*, utils::*,};
use crate::fundamental_args::{fal03::*, falp03::*, fapa03::*, faf03::*, fad03::*, faom03::*, fave03::*, fae03::*};
pub fn eect00(date1: f64, date2: f64)->f64
{
let mut fa = [0.0; 14];
struct TERM {
nfa: [i32; 8],
s: f64, c: f64,
}
impl TERM {
pub const fn new (nfa: [i32; 8], s: f64, c: f64,)->Self{
TERM { nfa: nfa, s: s, c: c }
}
}
const E0: [TERM; 33] = [
TERM::new([ 0, 0, 0, 0, 1, 0, 0, 0], 2640.96e-6, -0.39e-6 ),
TERM::new([ 0, 0, 0, 0, 2, 0, 0, 0], 63.52e-6, -0.02e-6 ),
TERM::new([ 0, 0, 2, -2, 3, 0, 0, 0], 11.75e-6, 0.01e-6 ),
TERM::new([ 0, 0, 2, -2, 1, 0, 0, 0], 11.21e-6, 0.01e-6 ),
TERM::new([ 0, 0, 2, -2, 2, 0, 0, 0], -4.55e-6, 0.00e-6 ),
TERM::new([ 0, 0, 2, 0, 3, 0, 0, 0], 2.02e-6, 0.00e-6 ),
TERM::new([ 0, 0, 2, 0, 1, 0, 0, 0], 1.98e-6, 0.00e-6 ),
TERM::new([ 0, 0, 0, 0, 3, 0, 0, 0], -1.72e-6, 0.00e-6 ),
TERM::new([ 0, 1, 0, 0, 1, 0, 0, 0], -1.41e-6, -0.01e-6 ),
TERM::new([ 0, 1, 0, 0, -1, 0, 0, 0], -1.26e-6, -0.01e-6 ),
TERM::new([ 1, 0, 0, 0, -1, 0, 0, 0], -0.63e-6, 0.00e-6 ),
TERM::new([ 1, 0, 0, 0, 1, 0, 0, 0], -0.63e-6, 0.00e-6 ),
TERM::new([ 0, 1, 2, -2, 3, 0, 0, 0], 0.46e-6, 0.00e-6 ),
TERM::new([ 0, 1, 2, -2, 1, 0, 0, 0], 0.45e-6, 0.00e-6 ),
TERM::new([ 0, 0, 4, -4, 4, 0, 0, 0], 0.36e-6, 0.00e-6 ),
TERM::new([ 0, 0, 1, -1, 1, -8, 12, 0], -0.24e-6, -0.12e-6 ),
TERM::new([ 0, 0, 2, 0, 0, 0, 0, 0], 0.32e-6, 0.00e-6 ),
TERM::new([ 0, 0, 2, 0, 2, 0, 0, 0], 0.28e-6, 0.00e-6 ),
TERM::new([ 1, 0, 2, 0, 3, 0, 0, 0], 0.27e-6, 0.00e-6 ),
TERM::new([ 1, 0, 2, 0, 1, 0, 0, 0], 0.26e-6, 0.00e-6 ),
TERM::new([ 0, 0, 2, -2, 0, 0, 0, 0], -0.21e-6, 0.00e-6 ),
TERM::new([ 0, 1, -2, 2, -3, 0, 0, 0], 0.19e-6, 0.00e-6 ),
TERM::new([ 0, 1, -2, 2, -1, 0, 0, 0], 0.18e-6, 0.00e-6 ),
TERM::new([ 0, 0, 0, 0, 0, 8,-13, -1], -0.10e-6, 0.05e-6 ),
TERM::new([ 0, 0, 0, 2, 0, 0, 0, 0], 0.15e-6, 0.00e-6 ),
TERM::new([ 2, 0, -2, 0, -1, 0, 0, 0], -0.14e-6, 0.00e-6 ),
TERM::new([ 1, 0, 0, -2, 1, 0, 0, 0], 0.14e-6, 0.00e-6 ),
TERM::new([ 0, 1, 2, -2, 2, 0, 0, 0], -0.14e-6, 0.00e-6 ),
TERM::new([ 1, 0, 0, -2, -1, 0, 0, 0], 0.14e-6, 0.00e-6 ),
TERM::new([ 0, 0, 4, -2, 4, 0, 0, 0], 0.13e-6, 0.00e-6 ),
TERM::new([ 0, 0, 2, -2, 4, 0, 0, 0], -0.11e-6, 0.00e-6 ),
TERM::new([ 1, 0, -2, 0, -3, 0, 0, 0], 0.11e-6, 0.00e-6 ),
TERM::new([ 1, 0, -2, 0, -1, 0, 0, 0], 0.11e-6, 0.00e-6 )
];
const E1: [TERM; 1] = [
TERM::new([ 0, 0, 0, 0, 1, 0, 0, 0], -0.87e-6, 0.00e-6 )
];
let t = ((date1 - URSA_DJ00) + date2) / URSA_DJC;
fa[0] = fal03(t);
fa[1] = falp03(t);
fa[2] = faf03(t);
fa[3] = fad03(t);
fa[4] = faom03(t);
fa[5] = fave03(t);
fa[6] = fae03(t);
fa[7] = fapa03(t);
let mut s0 = 0.0;
let mut s1 = 0.0;
for e0_i in E0.iter() {
let mut a = 0.0;
for j in 0..8 {
a += (e0_i.nfa[j]) as f64 * fa[j];
}
s0 += e0_i.s * sin(a) + e0_i.c * cos(a);
}
for e1_i in E1.iter() {
let mut a = 0.0;
for j in 0..8 {
a += (e1_i.nfa[j]) as f64 * fa[j];
}
s1 += e1_i.s * sin(a) + e1_i.c * cos(a);
}
(s0 + s1 * t ) * URSA_DAS2R
}