import re
import sqlite3
import glob


def readarray():
  filelist = glob.glob("inorganic*.txt")
  srcStrings = [("INORGANIC:([^\]]*)","Name"),
                ("MATERIAL_VALUE:(\d*)","Value"),
                ("MELTING_POINT:(\d*)","TempMelt"),
                ("BOILING_POINT:(\d*)","TempBoil"),
                ("SOLID_DENSITY:(\d*)","DensitySolid"),
                ("IMPACT_YIELD:(\d*)","ImpactYield"),
                ("IMPACT_FRACTURE:(\d*)","ImpactFracture"),
                ("IMPACT_STRAIN_AT_YIELD:(\d*)","ImpactStrain"),
                ("COMPRESSIVE_YIELD:(\d*)","CompressiveYield"),
                ("COMPRESSIVE_FRACTURE:(\d*)","CompressiveFracture"),
                ("(?:COMPRESSIVE_STRAIN_AT_YIELD|COMPRESSIVE_ELASTICITY):(\d*)","CompressiveStrain"),
                ("TENSILE_YIELD:(\d*)","TensileYield"),
                ("TENSILE_FRACTURE:(\d*)","TensileFracture"),
                ("(?:TENSILE_STRAIN_AT_YIELD|TENSILE_ELASTICITY):(\d*)","TensileStrain"),
                ("SHEAR_YIELD:(\d*)","ShearYield"),
                ("SHEAR_FRACTURE:(\d*)","ShearFracture"),
                ("(?:SHEAR_STRAIN_AT_YIELD|SHEAR_ELASTICITY):(\d*)","ShearStrain"),
                ("BENDING_YIELD:(\d*)","BendingYield"),
                ("BENDING_FRACTURE:(\d*)","BendingFracture"),
                ("(?:BENDING_STRAIN_AT_YIELD|BENDING_ELASTICITY):(\d*)","BendingStrain"),
                ("MAX_EDGE:(\d*)","EdgeMax"),
                ("ITEMS_HARD","ItemsHard"),
                ("ITEMS_METAL","ItemsMetal"),
                ("ITEMS_BARRED","ItemsBarred"),
                ("ITEMS_SCALED","ItemsScaled"),
                ("ITEMS_AMMO","ItemsAmmo"),
                ("ITEMS_WEAPON","ItemsWeapon"),
                ("ITEMS_WEAPON_RANGED","ItemsWeaponRanged"),
                ("ITEMS_DIGGER","ItemsDigger"),
                ("ITEMS_ARMOR","ItemsArmor"),
                ("USE_MATERIAL_TEMPLATE:([^\]]*)","Type")
                ]

  result = []
  for file in filelist:
    print(file)


    fin = open(file,"rb")
    fout = open("out.txt","wt+")
    stream = fin.read().decode("Windows-1251")

    resplit = re.compile("(\[INORGANIC:.*?)(?=\[INORGANIC:|$)",re.I|re.S)

    all = resplit.findall(stream)
    print(len(all))
    for item in all:
      stream = str(item)
      values = {}
      for src in srcStrings:
        retmp = re.compile("\[" + src[0] + "\]",re.I|re.S)
        res = retmp.search(stream)
        if res!=None:
          found = len(res.groups())
          if found == 1:
            values[src[1]] = res.group(1)
          elif found == 0:
            values[src[1]] = "Yes"
        else:
          values[src[1]] = ""

      res = re.findall("\[METAL_ORE:([^:]*):(\d*)\]",stream)
      #print(res)
      if res != None:
        values["Smelt"] = ", ".join("%s %s" % (r) for r in res)
      else:
        values["Smelt"] = ""
      for k in values.keys():
        fout.write(k + "=" + values[k] + "\t")
      fout.write("\n")
      result.append(values)
    fin.close()
  return result

def dbwrite(inarray):
  dbconn = sqlite3.connect(dbfilename)
  c = dbconn.cursor()
  c.execute("DROP TABLE IF EXISTS Inorganic")
  dbconn.commit()
  keys = list(inarray[0].keys())
  keys.sort()
  str = "CREATE TABLE Inorganic (%s)" % ",".join("%s text" % k for k in keys)
  c.execute(str)
  dbconn.commit()
  for item in inarray:
    str = "INSERT INTO Inorganic (%s) VALUES (%s)" % (",".join(keys), ",".join("?" for k in keys))
    c.execute(str,list(item[k] for k in keys))
    #print(list(item[k] for k in keys))
  dbconn.commit()
  

def csvwrite(inarray,fileout):
  fout = open(fileout,"wt")
  keys = list(inarray[0].keys())
  keys.sort()
  fout.write(";".join(keys) + "\n")
  for item in inarray:
    fout.write(";".join(item[k] for k in keys) + "\n")
  fout.close()

inorganic = readarray()
print(len(inorganic))
#dbfilename = "inorganic.db3"
#dbwrite(inorganic)
csvwrite(inorganic,"inorganic.csv")

