#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import (division, print_function, unicode_literals)
#############################################################################
# Author  : Jerome ODIER, Jerome FULACHIER, Fabian LAMBERT, Solveig ALBRAND
#
# Email   : jerome.odier@lpsc.in2p3.fr
#           jerome.fulachier@lpsc.in2p3.fr
#           fabian.lambert@lpsc.in2p3.fr
#           solveig.albrand@lpsc.in2p3.fr
#
# Version : 5.X.X for ATLAS (2014)
#
#############################################################################

import sys, datetime, pyAMI.app, pyAMI.utils, pyAMI_atlas.api

#############################################################################
# ENTRY POINT                                                               #
#############################################################################

def entry_point():
	#####################################################################

	app = pyAMI.app.App('atlas', 'text')

	#####################################################################
	# SHOW                                                              #
	#####################################################################

	parser_show = app.subparsers.add_parser('show', help = 'shows AMI-Tag, dataset, file, paper, etc...')

	subparsers_show = parser_show.add_subparsers()

	#####################################################################
	# SHOW.AMI-TAG                                                      #
	#####################################################################

	sub_parser = subparsers_show.add_parser('ami-tag', help = 'show AMI-Tag information')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_show_ami_tag)

	sub_parser.add_argument('tag', help = 'AMI-Tag')

	#####################################################################
	# SHOW.HIERARCHICAL-AMI-TAG                                         #
	#####################################################################

	sub_parser = subparsers_show.add_parser('hierarchical-ami-tag', help = 'show AMI-Tag information hierarchically')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_show_hierarchical_ami_tag)

	sub_parser.add_argument('tag', help = 'AMI-Tag')

	#####################################################################
	# SHOW.DATASET                                                      #
	#####################################################################

	parser_show_dataset = subparsers_show.add_parser('dataset', help = 'show dataset information')

	subparsers_show_dataset = parser_show_dataset.add_subparsers()

	#####################################################################
	# SHOW.DATASET.PROV                                                 #
	#####################################################################

	sub_parser = subparsers_show_dataset.add_parser('prov', description = 'Get dataset provenance')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_show_dataset_prov)

	sub_parser.add_argument('dataset', help = 'Logical Dataset Name (LDN)')

	#####################################################################
	# SHOW.DATASET.INFO                                                 #
	#####################################################################

	sub_parser = subparsers_show_dataset.add_parser('info', description = 'Get dataset metadata')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_show_dataset_info)

	sub_parser.add_argument('dataset', help = 'Logical Dataset Name (LDN)')

	#####################################################################
	# SHOW.FILE                                                         #
	#####################################################################

	sub_parser = subparsers_show.add_parser('file', help = 'show file information')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_show_file)

	sub_parser.add_argument('file', help = 'GUID or LFN')

	#####################################################################
	# SHOW.PAPER                                                        #
	#####################################################################

	sub_parser = subparsers_show.add_parser('paper', help = 'show paper information')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_show_paper)

	sub_parser.add_argument('refCode', help = 'Glance Reference Code')

	#####################################################################
	# LIST                                                              #
	#####################################################################

	parser_list = app.subparsers.add_parser('list', help = 'list runs, files, datasets, commandes, etc...')

	subparsers_list = parser_list.add_subparsers()

	#####################################################################
	# LIST.COMMANDS                                                     #
	#####################################################################

	sub_parser = subparsers_list.add_parser('commands', description = 'List AMI commands')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_commands)

	#####################################################################
	# LIST.PROJECTS                                                     #
	#####################################################################

	sub_parser = subparsers_list.add_parser('projects', description = 'List ATLAS projects')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_projects)

	pyAMI.utils.smart_execute_parser(sub_parser, 'projects')

	#####################################################################
	# LIST.SUBPROJECTS                                                  #
	#####################################################################

	sub_parser = subparsers_list.add_parser('subprojects', description = 'List ATLAS subprojects')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_subprojects)

	pyAMI.utils.smart_execute_parser(sub_parser, 'subprojects')

	#####################################################################
	# LIST.TYPES                                                        #
	#####################################################################

	sub_parser = subparsers_list.add_parser('types', description = 'List ATLAS data types')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_types)

	pyAMI.utils.smart_execute_parser(sub_parser, 'types')

	#####################################################################
	# LIST.SUBTYPES                                                     #
	#####################################################################

	sub_parser = subparsers_list.add_parser('subtypes', description = 'List ATLAS data subtypes')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_subtypes)

	pyAMI.utils.smart_execute_parser(sub_parser, 'subtypes')

	#####################################################################
	# LIST.PRODSTEPS                                                    #
	#####################################################################

	sub_parser = subparsers_list.add_parser('prodsteps', description = 'List ATLAS production steps')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_prodsteps)

	pyAMI.utils.smart_execute_parser(sub_parser, 'prodsteps')

	#####################################################################
	# LIST.NOMENCLATURE                                                 #
	#####################################################################

	sub_parser = subparsers_list.add_parser('nomenclature', description = 'List ATLAS nomenclature')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_nomenclature)

	pyAMI.utils.smart_execute_parser(sub_parser, 'nomenclature')

	#####################################################################
	# LIST.DATASETS                                                     #
	#####################################################################

	sub_parser = subparsers_list.add_parser('datasets', description = 'List ATLAS datasets')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_datasets)

	pyAMI.utils.smart_execute_parser(sub_parser, 'datasets')

	sub_parser.add_argument('--grl', help = None, type = str, default = None, metavar = 'FILENAME')

	#####################################################################
	# LIST.DATAPERIODS                                                  #
	#####################################################################

	sub_parser = subparsers_list.add_parser('dataperiods', description = 'List data periods at a specified detail level for a given year')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_dataperiods)

	sub_parser.add_argument('-y', '--year', help = 'year', type = int, default = None)
	sub_parser.add_argument('-l', '--level', help = '1 (high), 2 (default), or 3 (low) (default: 2)', choices = ['1', '2', '3'], default = '2')

	#####################################################################
	# LIST.RUNS                                                         #
	#####################################################################

	YEAR = (datetime.date.today() - datetime.timedelta(182.625)).year % 100

	#####################################################################

	sub_parser = subparsers_list.add_parser('runs', description = 'List runs for a given year')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_runs)

	sub_parser.add_argument('-L', '--long', help = 'run in verbose mode', action = 'store_true', default = False)
	sub_parser.add_argument('-y', '--year', help = 'year (default: %s)' % YEAR, type = int, default = None)
	sub_parser.add_argument('-p', '--data-periods', help = 'data period name(s)', nargs = '*', metavar = 'DATA_PERIOD')

	#####################################################################
	# LIST.FILES                                                        #
	#####################################################################

	sub_parser = subparsers_list.add_parser('files', description = 'List files in a dataset or container')
	sub_parser.set_defaults(func = pyAMI_atlas.api.mode_list_files)

	sub_parser.add_argument('-l', '--limit', help = 'limit number of results', type = int, default = None)
	sub_parser.add_argument('-L', '--long', help = 'run in verbose mode', action = 'store_true', default = False)
	sub_parser.add_argument('-H', '--human', help = 'human readable format', action = 'store_true', default = False)
	sub_parser.add_argument('-C', '--count', help = 'produce a grand total', action = 'store_true', default = False)
	sub_parser.add_argument('dataset', help = 'either a dataset container name or a TID dataset name')

	#####################################################################

	return app.run()

#############################################################################

if __name__ == '__main__':
	sys.exit(entry_point())

#############################################################################
