'''
Creates Tide netcdf file ready for population

@author: Mr. Srikanth Nagella
'''

from netCDF4 import Dataset 
import datetime
import logging

def CreateBDYTideNetcdfFile(filename, N,I,J,h,fv,grd):
    gridNames = ['T', 'U', 'V']
    
    # Dimension Lengths
    xb_len = N
    yb_len = 1
    x_len  = I
    y_len  = J
    
    # Enter define mode
    ncid = Dataset(filename, 'w', clobber=True, format='NETCDF4')
    
    #define dimensions
    dimxbID = ncid.createDimension('xb',xb_len)
    dimybID = ncid.createDimension('yb',yb_len)
    dimxID  = ncid.createDimension('x', x_len)
    dimyID  = ncid.createDimension('y', y_len)

    #define variable  
    varlonID = ncid.createVariable('nav_lon','f4',('y','x',))
    varlatID = ncid.createVariable('nav_lat','f4',('y','x',))
    
    
    if grd =='T':
        varmskID = ncid.createVariable('bdy_msk','f4',('y','x',),fill_value=fv)
        varz1ID = ncid.createVariable('z1','f4',('yb','xb',),fill_value=fv)
        varz2ID = ncid.createVariable('z2','f4',('yb','xb',),fill_value=fv)
    elif grd == 'U':
        varu1ID = ncid.createVariable('u1','f4',('yb','xb',),fill_value=fv)
        varu2ID = ncid.createVariable('u2','f4',('yb','xb',),fill_value=fv)
    elif grd == 'V':
        varv1ID = ncid.createVariable('v1','f4',('yb','xb',),fill_value=fv)
        varv2ID = ncid.createVariable('v2','f4',('yb','xb',),fill_value=fv)
    else :
        logging.error("Unknown Grid input")
        
    
    varnbiID = ncid.createVariable('nbidta','i4',('yb','xb',))
    varnbjID = ncid.createVariable('nbjdta','i4',('yb','xb',))
    varnbrID = ncid.createVariable('nbrdta','i4',('yb','xb',))
    #Global Attributes
    ncid.file_name = filename
    ncid.creation_date = str(datetime.datetime.now())
    ncid.history = h
    ncid.institution = 'National Oceanography Centre, Livepool, U.K.'
    
    #Longitude axis attributes
    varlonID.axis = 'Longitude'
    varlonID.short_name = 'nav_lon'
    varlonID.units = 'degrees_east'
    varlonID.long_name = 'Longitude'
    
    #Latitude axis attributes
    varlatID.axis = 'Latitude'
    varlatID.short_name = 'nav_lat'
    varlatID.units = 'degrees_east'
    varlatID.long_name = 'Latitude'
    
    #nbidta attributes
    varnbiID.short_name = 'nbidta'
    varnbiID.units = 'unitless'
    varnbiID.long_name = 'Bdy i indices'
    
    #nbjdta attributes
    varnbjID.short_name = 'nbjdta'
    varnbjID.units = 'unitless'
    varnbjID.long_name = 'Bdy j indices'
    
    #nbrdta attributes
    varnbrID.short_name = 'nbrdta'
    varnbrID.units = 'unitless'
    varnbrID.long_name = 'Bdy discrete distance'
    if grd == 'T' :
      
        varmskID.short_name = 'bdy_msk'
        varmskID.units = 'unitless'
        varmskID.long_name = 'Structured boundary mask'
        
        varz1ID.units = 'm'
        varz1ID.short_name = 'z1'
        varz1ID.long_name = 'tidal elevation: cosine'
        varz1ID.grid = 'bdyT'
        
        varz2ID.units = 'm'
        varz2ID.short_name = 'z2'
        varz2ID.long_name = 'tidal elevation: sine'
        varz2ID.grid = 'bdyT'
        
    elif grd == 'U' :
        
        varu1ID.units = 'm/s'
        varu1ID.short_name = 'u1'
        varu1ID.long_name = 'tidal east velocity: cosine'
        varu1ID.grid = 'bdyU'
        
        varu2ID.units = 'm/s'
        varu2ID.short_name = 'u2'
        varu2ID.long_name = 'tidal east velocity: sine'
        varu2ID.grid = 'bdyU'
        
    elif grd == 'V':
        
        varv1ID.units = 'm/s'
        varv1ID.short_name = 'v1'
        varv1ID.long_name = 'tidal north velocity: cosine'
        varv1ID.grid = 'bdyV'
        
        varv2ID.units = 'm/s'
        varv2ID.short_name = 'v2'
        varv2ID.long_name = 'tidal north velocity: sine'
        varv2ID.grid = 'bdyV'
        
    else :
        logging.error('Unknown Grid')
        
    ncid.close()