#  Unzip the LDS data file and set UTC time for the feature class

from datetime import datetime, timedelta, tzinfo
import fmeobjects
import os
import time
import zipfile

#  New Zealand timezone
class NZ(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=12) + self.dst(dt)
    def dst(self, dt):
        # DST starts last Sunday in September
        d = datetime(dt.year, 10, 1)
        self.dston = d - timedelta(days=d.weekday() + 1)
        # DST ends last Sunday in April
        d = datetime(dt.year, 5, 1)
        self.dstoff = d - timedelta(days=d.weekday() + 1)
        # December 31
        dec31 = datetime(dt.year, 12, 31)
        # January 1
        jan01 = datetime(dt.year, 1, 1)
        if (self.dston <=  dt.replace(tzinfo=None) <= dec31) or (jan01 <= dt.replace(tzinfo=None) <= self.dstoff):
            return timedelta(hours=1)
        else:
            return timedelta(0)
    def tzname(self,dt):
        return "NZ"

#  Greenwich timezone
class UTC(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=0)
    def dst(self, dt):
        return timedelta(0)
    def tzname(self,dt):
        return "UTC"

# Extract UTC time for the data
class FeatureProcessor(object):
    def __init__(self):
        pass
    def input(self,feature):
        zipPath = feature.getAttribute('LDS_Zipfile')
        zf = zipfile.ZipFile(zipPath, 'r')
        zidt = min([zi.date_time for zi in zf.infolist()])
        local_datetime = datetime(zidt[0],zidt[1],zidt[2],zidt[3],zidt[4],zidt[5],tzinfo=NZ())
        utc_datetime = local_datetime.astimezone(UTC())
        feature.setAttribute('Download_Datetime',utc_datetime.isoformat())
        zf.close()
        self.pyoutput(feature)
    def close(self):
        pass
