#!python
"""
Create a directory (ContainerNode) in the VOSpace repository.
"""

import sys, logging
from vos.commonparser import CommonParser
from vos import vos, __version__

usage = "%prog [options] vos:root/directory/file.txt"

description = ("Deletes a dataNode from VOSpace.  Patterns, such as vos:root/junk.*, are allowed. "
              "Only files will be deleted, directories are skipped.  "
              "You must have write permission on the directory to delete a file.  "
              "Files that are locked can not be deleted with this command." )

parser = CommonParser(usage=usage, description=description)

if len(sys.argv) == 1:
        parser.print_help()
        sys.exit()

(opt, args) = parser.parse_args()
parser.process_informational_options()

logger = logging.getLogger()
logger.setLevel(parser.log_level)

try:
    client = vos.Client(vospace_certfile=opt.certfile, vospace_token=opt.token)
except Exception as e:
    logger.error("Connection failed:  %s" % str(e))
    exit_code = getattr(e, 'errno', -1)
    sys.exit(exit_code)

for arg in args:
    if arg[0:4] != "vos:":
        logger.error("%s is not a valid VOSpace handle" % arg)
    for uri in client.glob(arg):
        try:
            if client.isfile(uri) or client.get_node(uri).islink():
                logger.info("deleting %s" % uri)
                client.delete(uri)
            elif client.isdir(uri):
                logger.error("%s is a directory" % uri)
            elif client.access(uri):
                logger.info("deleting link %s" % uri)
                client.delete(uri)
            else:
                logger.error("%s file not found" % uri)
                sys.exit(-1)
        except Exception as e:
            import re
            if re.search("NodeLocked", str(e)) is not None:
                logger.error("Use vlock to unlock %s before deleting." % uri)
            exit_code = getattr(e, 'errno', -1)
            logger.error("Failed trying to delete {0}: {1}".format(uri, str(e)))