#!/usr/bin/python3
# 
from __future__ import print_function
from vtkplotter.vtkio import _loadFile, convertNeutral2Xml, write
from vtkplotter.utils import humansort
from vtkplotter import printc
import sys, argparse

allowedexts = ['vtk', 'vtp', 'vtu', 'vts', 'ply', 'stl', 'byu', 'xml']

pr = argparse.ArgumentParser(description="Allowed targets: "+str(allowedexts))
pr.add_argument('files', nargs='*', help="Input filename(s)")
pr.add_argument("-to", type=str, help="target format [vtk]", default='vtk', metavar='')
args = pr.parse_args()

humansort(args.files)
nfiles = len(args.files)
if nfiles == 0: 
    sys.exit()

target_ext = args.to.lower()

if target_ext not in allowedexts:
    printc('Sorry target cannot be', target_ext, '\nMust be', allowedexts, c=1)
    sys.exit()

for f in args.files:
    source_ext = f.split('.')[-1]
    
    if target_ext == source_ext:
        continue

    if source_ext=='wrl':
        import vtk
        
        importer = vtk.vtkVRMLImporter()
        importer.SetFileName(f)
        importer.Read()
        importer.Update()
        
        actors = importer.GetRenderer().GetActors() #vtkActorCollection
        actors.InitTraversal()
        
        polyapp = vtk.vtkAppendPolyData()
        for i in range(actors.GetNumberOfItems()):
        	act = actors.GetNextActor()
        	poly = act.clean().computeNormals().polydata(False) 
        	polyapp.AddInputData(poly)
        	print('merging polydata',i ,'with', poly.GetNumberOfPoints(),'points')
        polyapp.Update()
        poly = polyapp.GetOutput()
    else:
        a = _loadFile(f, 0, 1,0,0, None,None, 0,0) #dummy actor
        poly = a.clean().computeNormals().polydata(False)
            
    newf = f.replace("."+source_ext,"")+"."+target_ext
    printc('converting',f, '->', newf, c='g')

    if ".neu" in f and target_ext=='xml':
        convertNeutral2Xml(f, newf)
    else:
        write(poly, newf)
 