#a class for making html tables of results
import os
import time 
import string
import shutil
import inspect
import sys

import socket

class tableMaker:
 def __init__(self, thedir, testname, header='', footer=''):

  a=inspect.stack()
  stacklevel=0
  for k in range(len(a)):
      if (string.find(a[k][1], 'ipython console') > 0):
          stacklevel=k     
  myf=sys._getframe(stacklevel).f_globals
  self.header=header
  self.footer=footer
  self.thedir=thedir
  self.pagename=thedir+'/result-'+time.strftime('%Y_%m_%d_%H_%M.html')

  #self.pagename='result-test.html'
  #if access(self.pagename,F_OK): 
  # remove(self.pagename)
  # print 'removing old junk'
  self.oldarchive(thedir)
  if self.header != '' and os.path.isfile(self.header):
      shutil.copy(self.header, self.pagename)
  self.fd=os.open(self.pagename,os.O_APPEND|os.O_WRONLY,0644)
  s='<title>'
  s+='Test results for '+time.strftime('%Y_%m_%d') +'</title>\n'
  os.write(self.fd,s)
  os.write(self.fd,'<body>\n')
  os.write(self.fd, '<p><A HREF="%s">%s</A>\n<p>'%('archive.html','ARCHIVE OF PREVIOUS RUNS'))
  os.write(self.fd, '<CENTER><TABLE border="1" cellpadding=5 summary="Quick view over tests."><CAPTION><EM>Summary  of Tests on %s --  %s -- %s</EM></CAPTION>\n'%(os.uname()[0],os.uname()[1], myf['casalog'].version()) )
  os.write(self.fd, '<TR><TH align=middle>Test Name<TH align=middle>Image Name<TH align=middle>Quick Result<TH align=middle> Status <TH align=middle> Link to results\n')
 
 def addRows(self,stuff): #values has two components, number+status
  #print stuff
  
  for i in stuff:
   if(i[2]==1): status='<font color="green">Passed</font>'
   elif (i[2]==2): status='<font color="blue">Unknown</font>'
   else: status='<font color="red">Failed</font>'
#   link='<A HREF="file:///%s">%s</A>\n'%(i[3],i[3])
   link='<A HREF="%s">%s</A>\n'%(i[3],i[3]) 
   s='<TR><TD>%s<TD>%s<TD>%s<TD>%s<TD>%s\n'%(i[0],i[4],i[1],status,link)
   os.write(self.fd,s) 

 def done(self):
  os.write(self.fd, '</CENTER></TABLE>\n')
  os.write(self.fd,'</body>\n')
  s='</html>\n'
  os.write(self.fd,s)
  os.close(self.fd)
  if self.footer != '' and os.path.isfile(self.footer):
      os.system('cat '+self.footer+' >> '+self.pagename)
  print 'table written to %s\n'%self.pagename
  return self.pagename

 def oldarchive(self, result_dir):
     #RESULT_DIR='/home/ballista3/Regression/Result'

##remove archive file
     os.system('rm -f '+result_dir+'/archive.html')
     a=os.listdir(result_dir)
     b=os.listdir(result_dir)
     for k in range(len(b)) :
         if(string.count(b[k], '.html') < 1):
             a.remove(b[k])

     a.sort(reverse=True)

     fd=os.open(result_dir+'/archive.html', os.O_CREAT|os.O_WRONLY,0644)
     s='<title>'
     s+='Archive of test results '+time.strftime('%Y_%m_%d') +'</title>\n'
     os.write(fd,s)
     os.write(fd,'<body>\n')
     for k in range(len(a)):
         os.write(fd, '<p><A HREF="%s">%s</A>\n<p>'%(a[k],a[k]))

     os.write(fd,'</body>\n')
     s='</html>\n'
     os.write(fd,s)
     os.close(fd)