#! /usr/bin/python3 -t

PROG_DESC = "Outputs an SVG 'roadkill' diagram for said molecule"

import math; from math import sqrt,sin,cos,pi
import rn
import sys, os, re
import mformula
import mformula_oxocarbon; from mformula_oxocarbon import build_formula_COO_1neg
import mformula_svg


def image_name(style):
  fname = __file__
  imgname = re.sub(r'.*[/]', "", fname[0:-3]) + \
    "_style" + style
  return imgname

def image_descr(style):
  fname = __file__
  imgname = re.sub(r'.*[/]', "", fname[0:-3])
  descr = "Structural formula of " + re.sub(r'[_]', " ", imgname)
  descr += "\n" + \
    "\n" + \
    mformula_svg.style_descr(style)
  return descr

def build_formula(svg):

  fm = mformula.obj()

  fh = build_formula_half(svg)

  k0 = fm.add_subformula(fh, 0,   0, [0,0]) # Left half
  k1 = fm.add_subformula(fh, 0, 180, [0,0]) # Right half
  fm.add_bond(k0+0,k1+0,1.0)

  return fm

def image_name(style):
  fname = __file__
  imgname = re.sub(r'.*[/]', "", fname[0:-3]) + \
    "_style" + style
  return imgname

def image_descr(style):
  fname = __file__
  imgname = re.sub(r'.*[/]', "", fname[0:-3])
  descr = "Structural formula of " + re.sub(r'[_]', " ", imgname)
  descr += "\n" + \
    "\n" + \
    mformula_svg.style_descr(style)
  return descr

def build_formula_half(svg) :

  fh = mformula.obj()
  c30 = cos(30*pi/180)
  s30 = sin(30*pi/180)

  ub = svg.rel_bond_length(1.0)  # Relative length of bond between middle Cs.

  ab = svg.rel_bond_length(1.0)  # Relative length of bond from middle C to end C.

  cv = 2.0                  # Valence of bond from middle C to keto O.
  cb = svg.rel_bond_length(cv)   # Relative length of bond from middle C to keto O.

  # Atom centers:
  p0 = rn.scale(ub, [+0.5*c30, -0.5*s30])       # Middle carbon.
  p1 = rn.add(p0, rn.scale(ab, [+c30, +s30]))   # End carbon.
  p2 = rn.add(p0, rn.scale(cb, [00, -1]))       # Keto oxygen.

  k0 = fh.add_atom("C", p0, 0,0)

  fg = build_formula_COO_1neg(svg,120)
  k1 = fh.add_subformula(fg, 0, 30, p1)

  k2 = fh.add_atom("O", p2, 0,0)

  fh.add_bond(k0,k1,1.0)
  fh.add_bond(k0,k2,cv)

  return fh

