#!/usr/bin/env python
#
# Display basins information
#
# Arnau Miro, Elena Terzic (2021)
from __future__ import print_function

import argparse
import Basins


## Define input arguments
argpar = argparse.ArgumentParser(prog="basins_info", description="Display basins information.")
argpar.add_argument('-b','--basin',type=str,help='Basin to display info (e.g., worldseas.med)',dest='basin')
argpar.add_argument("-l","--list",action='store_true',help='List all the available basins and close',dest="list")
argpar.add_argument('-p','--print',type=str,help='Dump basin info to a file', dest='print')
argpar.add_argument("-d","--display",action='store_true',help='Display the basin using matplotlib',dest="disp")

# Parse input arguments
args=argpar.parse_args()


## List
if args.list:
	MODULES_LIST = ['generic', 'hydrolakes', 'worldseas','worldcountries','adriatic','baltic']
	for module in MODULES_LIST:
		module_obj = getattr(Basins,module)
		basins_dict = vars(module_obj)
		# Print
		print('module %s:'%module,flush=True)
		for key in basins_dict.keys():
			if 'SHAPESPATH' in key or '__' in key: continue
			name   = basins_dict[key].name
			abbrev = basins_dict[key].abbrev
			# Print
			print('  %s - %s (%s)' % (key,name,abbrev),flush=True)
	exit(0)


## Obtain basin object
module = args.basin.split('.')[0]
basin  = args.basin.split('.')[1]
basin_obj = getattr(getattr(Basins,module),basin)
print(basin_obj,flush=True)
print(basin_obj.box,flush=True)


## Dump into a file if requested
if args.print and not isinstance(basin_obj,Basins.ComposedBasin):
	basin_obj.to_file(args.print)


## Display if requested
if args.disp:
	import matplotlib.pyplot as plt
	plt.figure(figsize=(8,6),dpi=100)
	if isinstance(basin_obj,Basins.ComposedBasin):
		for b in basin_obj:
			plt.plot(b.x,b.y,'o-k')
	else:
		plt.plot(basin_obj.x,basin_obj.y,'o-k')
	plt.scatter(basin_obj.centroid.x,basin_obj.centroid.y,marker='x',c='k')

	plt.show()