#
# Example python script to generate an equivalent XML document from XML input
#
# Example: Round value robin, XML to XML conversion with partial value monging
#

from __future__ import print_function

# Import the KiCad python helper module and the csv formatter
import kicad_netlist_reader
import sys

def checkvalue(self):
    """Check values, and replace with preferred/consistent values"""
    ref = self.getRef()
    r = ref.split("R")
    c = ref.split("C")
    v = self.getValue()

    # Common to all values - convert decimation if necessary
    dec = v.split(",")
    if (len(dec) == 2):
        newval = dec[0] + "." + dec[1]
        self.setValue(newval)
        v = self.getValue()

    if len(r) == 2 and r[1].isdigit():
        # This is a resistor - make values consistent
        # If the value is a pure value, add R to the end of the value
        if v.isdigit():
            i = int(v)
            if (i > 1000000):
                i = i / 1000000
                v = str(i) + "M"
            if (i > 1000):
                i = i / 1000
                v = str(i) + "K"
            else:
                v = str(i) + "R"

            self.setValue(v)
        else:
            # Get the multiplier character
            multiplier = v[len(v) - 1]
            v = v.strip(multiplier)
            v = v.split(".")
            if (len(v) == 2):
                newval = v[0] + multiplier + v[1]
                self.setValue(newval)
                v = self.getValue()



# Give components a new method for checking the values (this could easily be a
# Company Part Number generator method instead)
kicad_netlist_reader.comp.checkvalue = checkvalue

# Generate an instance of a generic netlist, and load the netlist tree from
# the command line option. If the file doesn't exist, execution will stop
net = kicad_netlist_reader.netlist(sys.argv[1])

# Open a file to write to, if the file cannot be opened output to stdout
# instead
canOpenFile = True
try:
    f = open(sys.argv[2], 'w')
except IOError:
    e = "Can't open output file for writing: " + sys.argv[2]
    print(__file__, ":", e, file=sys.stderr)
    f = sys.stdout
    canOpenFile = False

for c in net.components:
    c.checkvalue()

print(net.formatXML(), file=f)

if not canOpenFile:
    sys.exit(1)