#!/usr/bin/python3
#######################################################################
# Create a movie
# New available frames added at each run 
#######################################################################
#Python standard needs
from os.path import expanduser
import os
from datetime import datetime
import time
import argparse

#EDS needs
import eds_defs
import eds_funcs

#Set message level: 0=quiet, 1=errors only, 2: warnings, >2: messages
eds_defs.verbose_level=2

#locations for downloaded zip- and unzipped files; needs different locations
# If eds_defs.path_unzipped not defined: unzip not done
home=expanduser("~")
eds_defs.path_download=home+'/data/live/zipped'
eds_defs.path_unzipped=home+'/data/live/unzipped'

# Key file
eds_defs.keys_file='eds.key'

# use_list=True: use list defined in eds_funcs.py
use_list=False
# otherwise read product from file:
prodfile="eds.prd"

#default nr. product to use (>=1)
sel_nr=1

#get latest of current day
def run_get(selected_id):
  # Define all-dat time period
  tm=time.gmtime()
  start_date = datetime(tm.tm_year,tm.tm_mon, tm.tm_mday,0,0)
  end_date = datetime(tm.tm_year,tm.tm_mon, tm.tm_mday,23,59)

  # Create list of files to download; take 'nr_download' last items of available
  nr_download=2
  product_list=eds_funcs.create_list(selected_id,start_date,end_date,nr_download)
  collection_id=selected_id.replace(":","%3A")
  if product_list:
    if eds_defs.path_unzipped != '':
      # Clean-up: remove all previously downloaded files not in current list
      eds_funcs.remove_not_in_dataset(product_list)

    access_token = eds_funcs.get_token()
    # go through list in reversed order (oldest first)
    for product_id in reversed(product_list):
      # Download product if not done yet
      if (not eds_funcs.download_zipped_product(collection_id,product_id,access_token)):
        eds_funcs.message("Received " + product_id+".nat",2)
  else:
    eds_funcs.message("Product " + selected_id + " doesn't exist.",1)
    return False
  return True

###########################################################################
#
parser = argparse.ArgumentParser('eds_make_movie')
parser.add_argument('-verbose',default=eds_defs.verbose_level,  help="0=quiet, 1=errors, 2=+warnings, >2=+info")
if use_list:
  parser.add_argument('-nprod',default=sel_nr,                  help="Select product from fixed list")
else:
  parser.add_argument('-nprod',default=sel_nr,                  help="Select product from "+prodfile+" (line nr.)")
parser.add_argument('-product',                                 help="define product name")
parser.add_argument('-list'   ,default='', action='store_true', help="list products")

args = parser.parse_args()
eds_defs.verbose_level=int(args.verbose)
sel_nr=args.nprod
list_prod=args.list

if list_prod:
  eds_funcs.list_products(prodfile,use_list)
  quit()

if (args.product!=None):
  selected_item=args.product
  print('From options: ' + selected_item)
else:
  selected_item = eds_funcs.get_product(prodfile,int(sel_nr),use_list)

eds_funcs.message("#################################################",0)
eds_funcs.message("verbose_level=" + str(eds_defs.verbose_level),0)
eds_funcs.message("selnr=" + str(sel_nr),0)
eds_funcs.message("selected_item=" + str(selected_item),0)
eds_funcs.message("#################################################",0)

n=0
while (True):
  n=n+1
  print('try '+str(n),end='\r',flush=True)
  if not run_get(selected_item):
    break

  time.sleep(5*60) # wait for 5 minutes
