import os
import sys
import shutil
import glob
import numpy as np
from numpy import sin, cos, tan, pi
import csv
from pprint import pprint


from tklib.tkfile import tkFile
from tklib.tkutils import terminate, pint, pfloat, getarg, getintarg, getfloatarg
from tklib.tkapplication import tkApplication

from tklib.tkcrystal.tkcif import tkCIF
from tklib.tkcrystal.tkcrystal import tkCrystal
from tklib.tkcrystal.tkatomtype import tkAtomType


debug = 0

infile = 'test.cif'
single = 1
findvalidstructure = 1


def usage():
    print("")
    print("Usage:")
    print(" python {} infile ".format(sys.argv[0]))
    print("     ex: python {} {}"
                .format(sys.argv[0], infile))

def terminate(message = None):
    if message is not None:
        print("")
        print(message)

    print("")
    usage()
    print("")
    
    input("\nPress ENTER to exit>>")
    exit()


infile = getarg(1, infile)
debug  = getintarg(2, debug)


def main():
    app = tkApplication()
    logfile = app.replace_path(infile, template = ["{dirname}", "{filebody}-out.txt"])
    print(f"Open logfile [{logfile}]")
    app.redirect(targets = ["stdout", logfile], mode = 'w')

    print("")
    print("=============== CIF file read ============")
    print("infile: {}".format(infile))
    print("single: {}".format(single))
    print("findvalidstructure: {}".format(findvalidstructure))
    print("debug: {}".format(debug))

    print("")
    print("Read [{}]".format(infile))

#    if not tkutils.IsFile(infile):
#        terminate("Error: Invalid infile [{}]".format(infile))
    cif = tkCIF()
    cif.debug = debug
    
    cifdata = cif.ReadCIF(infile, find_valid_structure = findvalidstructure)
    cif.Close()

    if not cifdata:
        terminate("Error: Could not get cifdat from infile [{}]".format(infile))

    cifdata.Print()
    cry = cifdata.GetCrystal()
    print("")
    print("==============================================")
    cry.PrintInf()
    print("")
    print("==============================================")
            
    d = cry.Density()
    ad = cry.AtomDensity()
    

    terminate()


if __name__ == "__main__":
    main()

