import sqlite3
import commands
import glob
import re

sim_name="Void region with LW background"

def create_db():
    if glob.glob('stars.db') != []: 
       print "Star database exists, appending it" 
    else:
       conn = sqlite3.connect('stars.db')
       c = conn.cursor()
       # Create table
       c.execute('''CREATE TABLE stars (Simulation text, Type text, Current_redshift real, \
           Current_time real, Mass real, Creation_time real, Position_x real, Position_y real, Position_z real)''')
       conn.commit()
       conn.close()
    return 

def insert_PopIII(folder,n):
  a=commands.getoutput('grep CosmologyCurrentRedshift '+folder+'/RedshiftOutput%04i'%n)
  redshift=float(a.split()[2])
  a=commands.getoutput('grep InitialTime '+folder+'/RedshiftOutput%04i'%n)
  currenttime=float(a.split()[2])
 
  f=open(folder+'/PopIII_list_%04i_type1.txt'%n,'r')
  lines=f.readlines()
  f.close()
  lines.pop(0)

  newlines=[]
  for line in lines:
    line = line.split()
    line.pop(0)
    line.insert(0,currenttime)
    line.insert(0,round(redshift,1))
    line.insert(0,'Pop III (BH)')
    line.insert(0,sim_name)
    for i in range(4,len(line)):
        temp = line.pop(i)
        line.insert(i,float(temp))
    newlines.append(line)

  conn = sqlite3.connect('stars.db')
  c = conn.cursor()
  c.executemany('INSERT INTO stars VALUES (?,?,?,?,?,?,?,?,?)', newlines)
  conn.commit()
  conn.close()

  f=open(folder+'/PopIII_list_%04i_type5.txt'%n,'r')
  lines=f.readlines()
  f.close()
  lines.pop(0)

  newlines=[]
  for line in lines:
    line = line.split()
    line.pop(0)
    line.insert(0,currenttime)
    line.insert(0,round(redshift,1))
    line.insert(0,'Pop III (SNe)')
    line.insert(0,sim_name)
    for i in range(4,len(line)):
        temp = line.pop(i)
        line.insert(i,float(temp))
    newlines.append(line)

  conn = sqlite3.connect('stars.db')
  c = conn.cursor()
  c.executemany('INSERT INTO stars VALUES (?,?,?,?,?,?,?,?,?)', newlines)
  conn.commit()
  conn.close()

def insert_PopII(folder,n):
  a=commands.getoutput('grep CosmologyCurrentRedshift '+folder+'/RedshiftOutput%04i'%n)
  redshift=float(a.split()[2])
  a=commands.getoutput('grep InitialTime '+folder+'/RedshiftOutput%04i'%n)
  currenttime=float(a.split()[2])

  f=open(folder+'/PopII_list_%04i.txt'%n,'r')
  lines=f.readlines()
  f.close()
  lines.pop(0)

  newlines=[]
  for line in lines:
    line = line.split()
    line.pop(0)
    line.insert(0,currenttime)
    line.insert(0,round(redshift,1))
    line.insert(0,'Pop II')
    line.insert(0,sim_name)
    for i in range(4,len(line)):
        temp = line.pop(i)
        line.insert(i,float(temp))
    newlines.append(line)

  conn = sqlite3.connect('stars.db')
  c = conn.cursor()
  c.executemany('INSERT INTO stars VALUES (?,?,?,?,?,?,?,?,?)', newlines)
  conn.commit()
  conn.close()


create_db()

dlist = glob.glob('RD00??')
dlist.sort()
for folder in dlist:
  n = int(re.sub(r'\D',"",folder))
  if n < 3 :continue
  if glob.glob(folder+'/PopIII_inserted') != []: continue 
  if glob.glob(folder+'/PopIII_list_%04i_type5.txt'%n) == []: continue
  insert_PopIII(folder,n)
  open(folder+'/PopIII_inserted','w').close()
  insert_PopII(folder,n)
  open(folder+'/PopII_inserted','w').close()
