#!/usr/bin/env python
# -*- coding: Latin-1 -*-
# vim: tabstop=4 shiftwidth=4 expandtab

""" A simple script to download data from AVISO
"""

from optparse import OptionParser
from os.path import dirname, basename
from datetime import datetime

import aviso

# ============================================================================

# ==== Parsing the options on command line
parser = OptionParser()

parser.add_option("-c", "--config", dest="cfg_file",
            help="Config file")

parser.add_option("-R", "--region", dest="region",
            help="Area to download S/W/N/E")

parser.add_option("-D", dest="date",
            help="Timing limits 1998-07-21/1999-01-01", default='/')

parser.add_option("--logfile", dest="logfile",
            help="Logfile")

parser.add_option("--timestep", dest="dt",
            help="Time step [days] between snapshots", default=7)

parser.add_option("-u", "--username", dest="username",
            help="username at AVISO")

parser.add_option("-p", "--password", dest="password",
            help="password at AVISO")

parser.add_option("--map", dest="map",
        help="Type of map: 'madt' or 'msla' or 'madt+msla'", default='madt')

parser.add_option("--type", dest="type",
        help="Type of data: 'upd' or 'ref'", default='upd')

parser.add_option("-o", "--output", dest="output",
        help="output", default='./aviso.nc')

parser.add_option("--products", dest="products",
        help="Estimate products like 'W,zeta'")

parser.add_option("--etopofile", dest="zfile",
        default=None,
        help="./ETOPO2v2c_f4.nc")

parser.add_option("--maskshallowerthan", dest="zlimit",
        type="float", default=None,
        help="If defined, it will mask all gridpoints shallower than the given limit [m]. For example --maskshallowerthan=200 will mask shallower than 200m.")

(options, args) = parser.parse_args()
cfg_file = options.cfg_file

# ============================================================================
# Checking the must to
#for op in ['username', 'password']:

# Extracting boundary coordinates
LatIni, LonIni, LatFin, LonFin = options.region.split('/')

cfg = {'username': options.username,
        'password': options.password,
        'limits':{'t_step': int(options.dt),
            'LatIni': float(LatIni),
            'LatFin': float(LatFin),
            'LonIni': float(LonIni),
            'LonFin': float(LonFin),
            },
        'map': options.map,
        'type': options.type,
        'datadir': dirname(options.output),
        'filename': basename(options.output),
        'force_download': True,
        'logfile': 'aviso.log'
        }

try:
    d_ini, d_fin = options.date.split('/')
    if d_ini != '':
        cfg['limits']['d_ini'] = datetime.strptime(d_ini, '%Y-%m-%d')
    if d_fin != '':
        cfg['limits']['d_fin'] = datetime.strptime(d_fin, '%Y-%m-%d')
except:
    print "Wasn't able to understand '-D %s'" % options.date
    raise

aviso.AVISO_fetch(cfg)
#if hasattr(options, 'products'):
if options.products is not None:
    print "Hey ho!"
    aviso.Products(cfg)

if options.zlimit is not None:
    print("I'll mask shallower gridpoint than %s m. Sorry, it can be slow." % \
            options.zlimit)
    aviso.mask_shallow(ncfile=options.output, zlimit=-options.zlimit,
        zfile=options.zfile)

#data = aviso.Aviso_map(metadata=cfg)
