###############################################################################
#  Module name: CWMS_Sites                                                    #
#                                                                             #
#  Author     : Zhengtao Cui (Zhengtao.Cui@noaa.gov)                          #
#                                                                             #
#  Initial version date:                                                      #
#                                                                             #
#  Last modification date:  09/05/2019                                        #
#                                                                             #
#  Description: manage the ACE CWMS sites in CSV format                       #
#                                                                             #
#  Updated by: Donald W Johnson (donald.w.johnson@noaa.gov)                   #
#                                                                             #
#  Update Description: Change column names to match new site file             #
#                                                                             #
###############################################################################

import csv

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

           self._office_name1_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))
                              line_count += 1
#                           print('\t' + row["office"] + " " + row["name_1"] )
                           if row["office"] in self._office_name1_to_index:
                              self._office_name1_to_index[                  \
                                          row["office"] ][row["gage"] ] = \
                                        row[ "usace_gage_id" ]
                           else:
                              self._office_name1_to_index[ row["office"] ] = \
                                 dict( { row["gage"] : \
                                        row[ "usace_gage_id" ] } )

                           line_count += 1

                   print('Processed ' + str( line_count ) + ' lines.')
                   self.office_name1_to_index = self._office_name1_to_index


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

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


        @property
        def office_name1_to_index(self):
            return self._office_name1_to_index

        @office_name1_to_index.setter
        def office_name1_to_index(self, o):
            self._office_name1_to_index=o

        def getIndex(self, office, name1 ):

            if ( not office in self.office_name1_to_index.keys() ) or  \
               ( not name1 in self.office_name1_to_index[office].keys() ):

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

            print( "Found station: " + office + ' ' + name1 )
            return self.office_name1_to_index[ office][name1 ]