############################################################################
#
#  Program: GDCM (Grassroots DICOM). A DICOM library
#
#  Copyright (c) 2006-2011 Mathieu Malaterre
#  All rights reserved.
#  See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
#
#     This software is distributed WITHOUT ANY WARRANTY; without even
#     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
#     PURPOSE.  See the above copyright notice for more information.
#
############################################################################

import gdcm
import os,sys

def TestAnonymizer(filename, verbose = False):
  r = gdcm.Reader()
  r.SetFileName( filename )
  success = r.Read()
  if( not success ): return 1
  #print r.GetFile().GetDataSet()

  ano = gdcm.Anonymizer()
  ano.SetFile( r.GetFile() )
  # 1. Replace with another value
  ano.Replace( gdcm.Tag(0x0010,0x0010), "Test^Anonymize" )
  # 2. Remove a tag (even a SQ)
  ano.Remove( gdcm.Tag(0x0008,0x2112) )
  # 3. Make a tag empty
  ano.Empty( gdcm.Tag(0x0008,0x0070) )
  # Call the main function:
  success = ano.RemovePrivateTags() # do it !
  if( not success ): return 1

  # Check we can also change value from binary field
  #ano.Replace( gdcm.Tag(0x0010,0x0010), "16", gdcm. )

  # Let's check if our anonymization worked:
  if verbose:
    print(ano.GetFile().GetDataSet())

  # So at that point r.GetFile() was modified, let's simply passed it to the Writer:
  # First find a place where to write it out:
  subdir = "TestAnonymizerPython"
  tmpdir = gdcm.Testing.GetTempDirectory( subdir )
  if not gdcm.System.FileIsDirectory( tmpdir ):
    gdcm.System.MakeDirectory( tmpdir )
  # Ok directory does exist now, extract the name of the input file, and merge it in
  # our newly created tmpdir:
  outfilename = gdcm.Testing.GetTempFilename( filename, subdir )

  w = gdcm.Writer()
  w.SetFileName( outfilename )
  w.SetFile( r.GetFile() )
  w.SetCheckFileMetaInformation( False )
  success = w.Write()
  if( not success ): return 1

  if verbose:
    print("Success to write: %s"%outfilename)

  return success

if __name__ == "__main__":
  success = 0
  try:
    filename = os.sys.argv[1]
    success += TestAnonymizer( filename, True )
  except:
    # loop over all files:
    t = gdcm.Testing()
    nfiles = t.GetNumberOfFileNames()
    for i in range(0,nfiles):
      filename = t.GetFileName(i)
      success += TestAnonymizer( filename )


  # Test succeed ?
  sys.exit(success == 0)
