# -*- coding: utf-8 -*-
"""
Created on Fri Feb 25 2015

@author: Sajid Pareeth
@email: sajid.pareeth@fmach.it
"""
import os
#set following variables first
os.environ['PPP_CONFIG_DIR'] = '/usr/local/src/mpop/etc'
os.environ['PYGAC_CONFIG_FILE'] = '/usr/local/src/pygac/etc/pygac.cfg'
# Processing of avhrr l1b bands to tiff starts here...
import numpy as np
import pyresample
import pyproj
import geotiepoints
import argparse
import datetime
from pyresample import *
from pyresample.gradient_search import gradient_search
from pyresample.geometry import SwathDefinition
from pyresample.geometry import AreaDefinition
from mpop.satellites import PolarFactory
from mpop.projector import get_area_def
from mpop.satin.lac_klm_l1b import KLMReader

def main():
    usage = "usage: %prog [arguments]"
    parser = argparse.ArgumentParser(description='Process AVHRR L1B LAC KLM data from NOAA-CLASS')
    parser.add_argument('-n', "--name", dest="name",
                   help='name of the image file (L1B)')
    parser.add_argument('-I', "--instrument", dest="instrument",
                   help='NOAA Instrument code - NL(NOAA16),NM(NOAA17),NN(NOAA18),NP(NOAA19)')
    parser.add_argument('-Y', "--year", dest="year",
                   help='Year of the image')
    parser.add_argument('-d', "--doy", dest="doy",
                   help='Day of the year of the image')
    parser.add_argument('-H', "--hour", dest="hour",
                   help='Hour of the image in 24 hour format')
    parser.add_argument('-M', "--minute", dest="minute",
                   help='Minute of the image')
    parser.add_argument('-i', "--ipdirectory", dest="ipdirectory",
                   help='path to folder where input images are stored')
    parser.add_argument('-o', "--opdirectory", dest="opdirectory",
                   help='path to folder where output are saved')
		   
    args = parser.parse_args()
    mname = args.name
    minst = args.instrument
    myear = args.year
    mdoy = args.doy
    mhour = args.hour
    mminute = args.minute
    mipdir = args.ipdirectory
    mopdir = args.opdirectory
    #Pytroll starts here    
    reader = KLMReader()
    ts = datetime.datetime.strptime('{year} {doy} {hour} {minute}'.format(year=myear,doy=mdoy,hour=mhour,minute=mminute), '%y %j %H %M')
    reader.read("{ipdir}/{name}".format(ipdir=mipdir,name=mname))
    reader.get_lonlat()
    area_swath = SwathDefinition(reader.lons, reader.lats)
    channels = reader.get_calibrated_channels()
    sat_azi, sat_zen, sun_azi, sun_zen, rel_azi = reader.get_angles()
    ID=reader.instrument_id
    global_data = PolarFactory.create_scene("noaa", "{ID}".format(ID=ID), "avhrr", ts)
    area_def = get_area_def("euro_laea_AVHRR")
    scene = global_data
    global_data.area = area_swath
    # To save zenith angle as tiff, use the following line...
    channels[:, :, 2] = sat_zen
    scene[0.63] = channels[:, :, 0]
    scene[0.9125] = channels[:, :, 1]
    scene[3.74] = channels[:, :, 2]
    scene[10.8] = channels[:, :, 3]
    scene[12.0] = channels[:, :, 4]
    scene.area = area_swath
    l = scene.project("euro_laea_AVHRR")
    l1 = gradient_search(scene[0.63].data.astype(np.float64),scene[0.63].area.lons,scene[0.63].area.lats,area_def)
    l[0.63] = np.ma.masked_values(l1, 0)
    b1 = l.image(0.63, mode="L")
    b1.save("{opdir}/NSS.LHRR.{inst}.D{year}{doy}.S{hour}{minute}_b1.tif".format(opdir=mopdir,inst=minst,year=myear,doy=mdoy,hour=mhour,minute=mminute), floating_point=True)
    l2 = gradient_search(scene[0.9125].data.astype(np.float64),scene[0.9125].area.lons,scene[0.9125].area.lats,area_def)
    l[0.9125] = np.ma.masked_values(l2, 0)
    b2 = l.image(0.9125, mode="L")
    b2.save("{opdir}/NSS.LHRR.{inst}.D{year}{doy}.S{hour}{minute}_b2.tif".format(opdir=mopdir,inst=minst,year=myear,doy=mdoy,hour=mhour,minute=mminute), floating_point=True)
    lz = gradient_search(scene[3.74].data.astype(np.float64),scene[3.74].area.lons,scene[3.74].area.lats,area_def)
    l[3.74] = np.ma.masked_values(lz, 0)
    bz = l.image(3.74, mode="L")
    bz.save("{opdir}/NSS.LHRR.{inst}.D{year}{doy}.S{hour}{minute}_bz.tif".format(opdir=mopdir,inst=minst,year=myear,doy=mdoy,hour=mhour,minute=mminute), floating_point=True)
    l4 = gradient_search(scene[10.8].data.astype(np.float64),scene[10.8].area.lons,scene[10.8].area.lats,area_def)
    l[10.8] = np.ma.masked_values(l4, 0)
    b4 = l.image(10.8, mode="L")
    b4.save("{opdir}/NSS.LHRR.{inst}.D{year}{doy}.S{hour}{minute}_b4.tif".format(opdir=mopdir,inst=minst,year=myear,doy=mdoy,hour=mhour,minute=mminute), floating_point=True)
    l5 = gradient_search(scene[12.0].data.astype(np.float64),scene[12.0].area.lons,scene[12.0].area.lats,area_def)
    l[12.0] = np.ma.masked_values(l5, 0)
    b5 = l.image(12.0, mode="L")
    b5.save("{opdir}/NSS.LHRR.{inst}.D{year}{doy}.S{hour}{minute}_b5.tif".format(opdir=mopdir,inst=minst,year=myear,doy=mdoy,hour=mhour,minute=mminute), floating_point=True)
   
    ################ENDS HERE############################################

if __name__ == "__main__":
    main()
