#!/usr/bin/env python3

"""
For nbody, the c. o. m. is in the centre of (u, v) coordinates. :-)

"""

import sys
import numpy as np
import phoebe
from astropy import units

from phoebe.parameters import hierarchy as _hierarchy

#logger = phoebe.logger(clevel='INFO')
#logger = phoebe.logger(clevel='DEBUG')

phoebe.conf.devel_on()

b = phoebe.Bundle()

b.add_star(component='starA', color='red')
b.add_star(component='starB', color='green')
b.add_star(component='starC', color='blue')

b.add_orbit(component='orbit1', period=10.0)
b.add_orbit(component='orbit2', period=1000.0)

hier1 = _hierarchy.binaryorbit(b['orbit1'], b['starA'], b['starB'])
hier2 = _hierarchy.binaryorbit(b['orbit2'], hier1, b['starC'])

b.set_hierarchy(hier2)

print("hier = ", b.get_hierarchy())

f = open('twigs.txt', 'w')
for twig in b.twigs:
  f.write("%s\n" % (twig))
f.close()

print("DONE!")

b.add_constraint(phoebe.parameters.constraint.keplers_third_law_hierarchical, 'orbit2', 'orbit1')
b.add_compute(dynamics_method='rebound')

b.add_dataset('mesh', times=[250+2.5])

b.set_value('ntriangles@starA', context='compute', value=100)
b.set_value('ntriangles@starB', context='compute', value=100)
b.set_value('ntriangles@starC', context='compute', value=100)

b.run_compute()

print("b['mass@starA@component'] = ", b['mass@starA@component'])
print("b['mass@starB@component'] = ", b['mass@starB@component'])
print("b['mass@starC@component'] = ", b['mass@starC@component'])

#system = b['system']
#meshes = system.meshes
#mesh.get_columns_flat('')

fig, plt = b.plot(show=True, x='us', y='vs')
plt.savefig('test_phoebe22_rebound.png')

#print("b['00.000000@xyz_elements@starA@mesh01@phoebe01@latest@mesh@model'] = ", b['00.000000@xyz_elements@starA@mesh01@phoebe01@latest@mesh@model'])
#print("b['00.000000@xyz_elements@starB@mesh01@phoebe01@latest@mesh@model'] = ", b['00.000000@xyz_elements@starB@mesh01@phoebe01@latest@mesh@model'])
#print("b['00.000000@xyz_elements@starC@mesh01@phoebe01@latest@mesh@model'] = ", b['00.000000@xyz_elements@starC@mesh01@phoebe01@latest@mesh@model'])

sys.exit(1)

