#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
#
# Univention Corporate Client
#  UCC image download tool
#
# Copyright (C) 2012-2016 Univention GmbH
#
# http://www.univention.de/
#
# All rights reserved.
#
# The source code of this program is made available
# under the terms of the GNU Affero General Public License version 3
# (GNU AGPL V3) as published by the Free Software Foundation.
#
# Binary versions of this program provided by Univention to you as
# well as other copyrighted, protected or trademarked materials like
# Logos, graphics, fonts, specific documentations and configurations,
# cryptographic keys etc. are subject to a license agreement between
# you and Univention and not subject to the GNU AGPL V3.
#
# In the case you use this program under the terms of the GNU AGPL V3,
# the program is provided in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License with the Debian GNU/Linux or Univention distribution in file
# /usr/share/common-licenses/AGPL-3; if not, see
# <http://www.gnu.org/licenses/>.

from optparse import OptionParser
import sys
import os

import univention.debug as ud
import ucc.images as ucc_images
from univention.lib.i18n import Translation
_ = Translation('ucc-image-toolkit').translate

def parse_args():
	usage = '''%s [options] -s config_file ''' % sys.argv[0]
	parser = OptionParser(usage=usage)

	parser.add_option("-s", "--specurl", action="store", dest="spec", help="Spec file for the image download (without the URL part of the mirror)")
	#parser.add_option("-r", "--reload", action="store_true", dest="reload", help="Force reloading of file, do not resume downloads")
	parser.add_option("-p", "--set-root-pw-interactive", action="store_true", default=False, dest="rootpw", help="By default the root password from the current system is set in the image. Use this option to set it interactively")
	parser.add_option("--skip-hash", action="store_true", default=False, dest="skiphash", help="Skip validation of downloaded files")
	parser.add_option( '-d', '--debug', action = 'store', type = 'int', dest = 'debug', default = 2,
		help = 'if given than debugging is activated and set to the specified level [default: %default]' )

	(options, args) = parser.parse_args()

	if not options.spec:
		print 'ERROR: Missing argument -s spec_file.'
		print parser.print_help()
		sys.exit(1)

	return (options.spec, not options.skiphash, options.rootpw, options.debug)


class CLIProgress(ucc_images.Progress):
	def __init__(self):
		ucc_images.Progress.__init__(self)

	def advance(self, steps, substeps=-1):
		self.steps = steps
		self.substeps = substeps

		percent = min(100.0, (100.0 * steps) / self.max_steps)
		if substeps < 0:
			ucc_images.log_process('Overall: % 6.1f%%' % percent)
		else:
			percent_sub = min(100.0, (100.0 * substeps) / self.max_steps)
			sys.stdout.write(_('\r% 6.1f%%  [overall: % 6.1f%%]') % (percent_sub, percent))
			if substeps >= self.max_steps:
				sys.stdout.write(_(' ... done\n'))
			sys.stdout.flush()

		self._update_progress_file()

	def error(self, err):
		ucc_images.log_error(err)
		sys.exit(1)


if __name__ == "__main__":
	# call from the command line
	ucc_images.use_univention_debug = False
	spec_file, validate_hash, interactive_rootpw, debug_level = parse_args()
	ucc_images.download_ucc_image(spec_file, validate_hash=validate_hash, interactive_rootpw=interactive_rootpw, progress=CLIProgress())

