#! /usr/bin/python3 -t 

import mformula, mformula_svg
import mformula_oxocarbon as mox
import math; from math import sqrt,sin,cos,pi
import rn

def image_name(style):
  return "basic_test_style" + style
  
def image_descr(style):
  return \
    """Basic test of {mformula_oxocarbon}
    
    """ + \
    mformula_svg.style_descr(style)

def build_formula(svg) :
  fm = mformula.obj()
  b100 = svg.rel_bond_length(1.00)
  b125 = svg.rel_bond_length(1.25)
  b150 = svg.rel_bond_length(1.50)
  b175 = svg.rel_bond_length(1.75)
  b200 = svg.rel_bond_length(2.00)
  b300 = svg.rel_bond_length(3.00)
  
  a30 = 30*pi/180
  c30 = cos(a30)
  s30 = sin(a30)
  
  a60 = 60*pi/180
  c60 = cos(a60)
  s60 = sin(a60)
  
  p0 = [0,0]
  k0 = fm.add_atom("C", p0, 0,1)
  
  p1 = rn.add(p0, [b100,0])
  k1 = fm.add_atom("O", p1, -1,1)
  fm.add_bond(k0,k1,1.00)

  p2 = rn.add(p1, [b200,0])
  k2 = fm.add_atom("N", p2, +1,1)
  fm.add_bond(k1,k2,2.00)

  p3 = rn.add(p0, [0,b300])
  k3 = fm.add_atom("S", p3, +1,2)
  fm.add_bond(k0,k3,3.00)

  p4 = rn.add(p0, [0,-b150])
  k4 = fm.add_atom("H", p4, +2,5)
  fm.add_bond(k0,k4,1.50)

  p5 = rn.add(p2, rn.scale(b125, [+c30,-s30]))
  k5 = fm.add_atom("C", p5, 0,1)
  fm.add_bond(k2,k5,1.25)

  p6 = rn.add(p2, rn.scale(b175, [+c30,+s30]))
  k6 = fm.add_atom("P", p6, +1,1)
  fm.add_bond(k2,k6,1.75)

  p7 = rn.add(p2, rn.scale(b100, [-s30,-c30]))
  k7 = fm.add_atom("H", p7, 0,1)
  fm.add_bond(k2,k7,1.00)
  
  p8 = rn.add(p3, [0,b100])
  k8 = fm.add_atom("C", p8, 0,1)
  fm.add_bond(k3,k8,1.00)
  
  p9 = rn.add(p8, [+b100,0])
  fCOOH_0 = mox.build_formula_COOH(svg, 90,45, 0)
  k9 = fm.add_subformula(fCOOH_0, 0, 0, p9)
  fm.add_bond(k8,k9,1.00)
  
  pa = rn.add(p8, [-b100,0])
  fCOOH_1 = mox.build_formula_COOH(svg, 90,0, 1)
  ka = fm.add_subformula(fCOOH_1, 1, 0, pa)
  fm.add_bond(k8,ka,1.00)
   
  pb = rn.add(p8, [0,+b100])
  fCOO = mox.build_formula_COO_1neg(svg, 70)
  kb = fm.add_subformula(fCOO, 0, 90, pb)
  fm.add_bond(k8,kb,1.00)
  
  pc = rn.sub(p5, [0,b100])
  kc = fm.add_atom("N", pc, 0,1)
  fm.add_bond(k5,kc,1)
  a315 = 315*pi/180
  fm.add_free_bond(kc,a315,3)
  
  pd = rn.sub(pc, [b100,0])
  kd = fm.add_atom("+", pd, +2,3)
  
  pe = rn.sub(pd, [b100,0])
  ke = fm.add_atom("+", pe, -1,0)
  
  pf = rn.add(p0, [-b100,0])
  kf = fm.add_atom("C", pf, 0,1)
  fm.add_bond(k0,kf,1.00)
  
  pg = rn.add(pf, rn.scale(b100, [-c30,+s30])) + [ +1.00 ]
  kg = fm.add_atom("N", pg, 0,1)
  fm.add_bond(kf,kg,1.00)
  
  ph = rn.add(pf, rn.scale(b125, [-c30,-s30])) + [ -1.00 ]
  kh = fm.add_atom("N", ph, 0,1)
  fm.add_bond(kf,kh,1.25)
  
  pk = rn.add(pf, rn.scale(b200, [00.0,+1.0])) + [ -1.00 ]
  kk = fm.add_atom("O", pk, 0,1)
  fm.add_bond(kf,kk,2.00)
  
  pm = rn.add(pf, rn.scale(b300, [00.0,-1.0])) + [ +1.00 ]
  km = fm.add_atom("O", pm, 0,1)
  fm.add_bond(kf,km,3.00)

  return fm
