#!/usr/bin/env python
###############################################################################
#  Module name: Canadian_Sites                                                #
#                                                                             #
#  Author     : Zhengtao Cui (Zhengtao.Cui@noaa.gov)                          #
#                                                                             #
#  Initial version date:                                                      #
#                                                                             #
#  Last modification date:  12/01/2023                                        #
#                                                                             #
#  Description: manage the Canadian sites in CSV format                       #
#                                                                             #
###############################################################################

import csv

class Canadian_Sites:
        """
           Store Canadian site information 
        """        
        def __init__(self, csvSitefile ):
           """
              Initialize the Canadian_Sites object with a given
              filename
           """
           self.source = csvSitefile

           self._siteid_to_index = dict()
           with open( csvSitefile, mode='r') as csvsite_file: 
                   csvsite_reader = csv.DictReader( csvsite_file )
                   line_count = 0
                   for row in csvsite_reader:
                           if line_count == 0:
                              print('Column names are ' + ", ".join(row))

                           else:
                              self._siteid_to_index[ row["ID"] ] = \
                                                    row[ "OBJECTID" ]

                           line_count += 1

                   print('Processed ' + str( line_count ) + ' lines.')
                   self.siteid_to_index = self._siteid_to_index


        @property
        def source(self):
            return self._source

        @source.setter
        def source(self, s):
            self._source = s


        @property
        def siteid_to_index(self):
            return self._siteid_to_index

        @siteid_to_index.setter
        def siteid_to_index(self, o):
            self._siteid_to_index=o

        def getIndex(self, id ):

            if ( not id in self.siteid_to_index.keys() ): 

               raise KeyError( "Cannot find station for " + id + ' ' + \
                               " in the site file: " + \
                               self.source + '.' )

            print( "Found station: " + id )
            return self.siteid_to_index[ id ]

        def getStationIds(self ):
             return self.siteid_to_index.keys()