# Extend the class to add Medium Office specific stuff
class OpenStudio::Model::Model
  def define_space_type_map(building_type, template, climate_zone)
    space_type_map = nil

    space_type_map = case template

    when 'NECB 2011'
      # dom =A
      {
        'Warehouse - med/blk' => ['Zone3 Bulk Storage'],
        'Warehouse - fine' => ['Zone2 Fine Storage'],
        'Office - enclosed' => ['Zone1 Office']
      }
    else
      {
        'Bulk' => ['Zone3 Bulk Storage'],
        'Fine' => ['Zone2 Fine Storage'],
        'Office' => ['Zone1 Office']
      }
                     end
    return space_type_map
  end

  def define_hvac_system_map(building_type, template, climate_zone)
    case template
    when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
      system_to_space_map = [
        {
          'type' => 'PSZ-AC',
          'name' => 'HVAC_1',
          'space_names' => ['Zone1 Office']
        },
        {
          'type' => 'PSZ-AC',
          'name' => 'HVAC_2',
          'space_names' => ['Zone2 Fine Storage']
        },
        {
          'type' => 'UnitHeater',
          'name' => 'HVAC_3',
          'space_names' => ['Zone3 Bulk Storage']
        },
        {
          'type' => 'Zone Ventilation',
          'name' => 'Bulk Storage Zone Ventilation - Intake',
          'availability_sch_name' => 'Warehouse MinOA_Sched',
          'flow_rate' => 0.00025, # in m^3/s-m^2
          'ventilation_type' => 'Intake',
          'space_names' => ['Zone3 Bulk Storage']
        }
      ]
    when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
      system_to_space_map = [
        {
          'type' => 'PSZ-AC',
          'name' => 'HVAC_1',
          'space_names' => ['Zone1 Office']
        },
        {
          'type' => 'PSZ-AC',
          'name' => 'HVAC_2',
          'space_names' => ['Zone2 Fine Storage']
        },
        {
          'type' => 'UnitHeater',
          'name' => 'HVAC_3',
          'space_names' => ['Zone3 Bulk Storage']
        },
        {
          'type' => 'Zone Ventilation',
          'name' => 'Bulk Storage Zone Ventilation - Exhaust',
          'availability_sch_name' => 'Always On',
          'flow_rate' => OpenStudio.convert(80_008.9191, 'cfm', 'm^3/s').get,
          'ventilation_type' => 'Exhaust',
          'space_names' => ['Zone3 Bulk Storage']
        },
        {
          'type' => 'Zone Ventilation',
          'name' => 'Bulk Storage Zone Ventilation - Natural',
          'availability_sch_name' => 'Always On',
          'flow_rate' => OpenStudio.convert(2000, 'cfm', 'm^3/s').get,
          'ventilation_type' => 'Natural',
          'space_names' => ['Zone3 Bulk Storage']
        }
      ]
    end

    return system_to_space_map
  end

  def custom_hvac_tweaks(building_type, template, climate_zone, prototype_input)
    return true
  end

  def update_waterheater_loss_coefficient(template)
    case template
    when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013', 'NECB 2011'
      getWaterHeaterMixeds.sort.each do |water_heater|
        water_heater.setOffCycleLossCoefficienttoAmbientTemperature(0.798542707)
        water_heater.setOnCycleLossCoefficienttoAmbientTemperature(0.798542707)
      end
    end
  end

  def custom_swh_tweaks(building_type, template, climate_zone, prototype_input)
    update_waterheater_loss_coefficient(template)

    return true
  end
end