import com.nrims.UI as UI
import com.nrims.RatioProps as RatioProps
import com.nrims.MimsPlus as MimsPlus
import com.nrims.MimsJTable as MimsJTable

import java.io.File as File
import java.util.ArrayList as ArrayList
import java.lang.Integer as Integer

import sys
from java.lang.System import getProperty
sys.path.append(getProperty("fiji.dir") + "/plugins/Scripts/Plugins/OpenMIMS Scripts/")
from OMUtilities import MultiFileDialog
from OMUtilities import CheckFileLists

import os
import jarray

#hide/show debug prints
verbose = 1 

IJ.log("\n\nStarting OpenMIMSTables")

# The directory containing the .im/.nrrd files.
#imDirName = "/nrims/home3/cpoczatek/Fiji_test/test_images";

# The list of files.
imFileNames = MultiFileDialog("Open Image Files")

if verbose > 0:
  print "Image Files:"
  for i in range(len(imFileNames)):
    print imFileNames[i]

imDirName = os.path.dirname(imFileNames[0])
print "asdf " + imDirName

# The list of roi files (Needs to have same number of entries as .im files above).
roiFileNames = MultiFileDialog("Open ROI Files")

if verbose > 0:
  print "Roi Files:"
  for i in range(len(roiFileNames)):
    print roiFileNames[i]

# The list of files.
#imFileNames = ["test_file.nrrd", "test_file2.nrrd", "test_file3.nrrd"]
# The list of roi files (Needs to have same number of entries as .im files above).
#roiFileNames = ["test_file.rois.zip", "test_file2.rois.zip", "test_file3.rois.zip"]

# List of statistics.
# Others: "mean", "stddev", "median", "N/D", 
#         "min", "max", "sum", "mode", "area", 
#         "group", "roix", "roiy", 
#         "roiwidth", "roiheight"
stats = ["group", "area", "mean", "stddev", "N/D"]

#////////////////////////////
# Initialize stuff.
#////////////////////////////
ui = UI()
ui.show()

#////////////////////////////
# Loop over files.
#////////////////////////////
for i in range(len(imFileNames)):
  
  imFile = File(imFileNames[i])
  roiFile = File(roiFileNames[i])
  #IJ.log("Opening: "+imFileNames[i])
  ui.openFile(imFile)
  #IJ.log("Opening: "+roiFileNames[i])
  ui.openFile(roiFile)
  
  #////////////////////////////
  # Get the planes.
  #////////////////////////////
  planes = ui.getmimsTomography().getPlanes()

  #////////////////////////////
  # Get the rois.
  #////////////////////////////
  rois = ui.getRoiManager().getAllROIs()

  #////////////////////////////
  # Get images.
  #////////////////////////////
  imageArray = ArrayList()
  
  massimages = ui.getOpenMassImages()
  for j in range(len(massimages)):
    imageArray.add(massimages[j])
  
  
  # Ratio images
  # 0 corresponds to the first mass image (e.g. mass 12.0)
  # 1 corresponds to the second mass image (e.g. mass 13.0)
  ratioProps1 = RatioProps(1, 0)
  mp1 = MimsPlus(ui, ratioProps1)
  imageArray.add(mp1)
  IJ.log("Opening ratio: "+mp1.getTitle())

  # Ratio images
  # 2 corresponds to the first mass image (e.g. mass 26.0)
  # 3 corresponds to the second mass image (e.g. mass 27.0)
  ratioProps2 = RatioProps(3, 2)
  mp2 = MimsPlus(ui, ratioProps2)
  imageArray.add(mp2)
  IJ.log("Opening ratio: "+mp2.getTitle())

  images = jarray.zeros(imageArray.size(), MimsPlus)
  images = imageArray.toArray(images)
  
  #////////////////////////////
  # Create and display table.
  #////////////////////////////
  table = MimsJTable(ui)
  table.setStats(stats)
  table.setRois(rois)
  table.setImages(images)
  table.setPlanes(planes)
  #append=false
  nPlanes = ui.getOpener().getNImages()
  if nPlanes > 1:
       table.createTable(False)
  else:
       table.createSumTable(False)
  #table.showFrame();
  
  csvFileName = os.path.join(imDirName, ui.getImageFilePrefix()+"_data.csv")
  if os.path.exists(csvFileName):
    IJ.log("ERROR: file" + csvFileName + " exists. Skipping.")
  else:
    IJ.log("Writing: " + csvFileName)
    table.writeData(File(csvFileName))
    table.close()
    
  IJ.log("")

ui.closeCurrentImage()
ui.close()
IJ.log("OpenMIMSTables finished.\n\n")
