# Source: src/js/models/connectors/Geohash-Search.js

    /*global define */
    define(['backbone', "models/maps/assets/CesiumGeohash", "collections/SolrResults", "models/Search"],
      function(Backbone, CesiumGeohash, SearchResults, Search) {
      'use strict';

      /**
      * @class GeohashSearchConnector
      * @classdesc A model that creates listeners between the CesiumGeohash MapAsset model and the Search model.
      * @name GeohashSearchConnector
      * @extends Backbone.Model
      * @constructor
      * @classcategory Models/Connectors
      */
      return Backbone.Model.extend(
        /** @lends GeohashSearchConnector.prototype */ {

            /**
             * @type {object}
             * @property {SolrResults} searchResults
             * @property {CesiumGeohash} cesiumGeohash
             */
            defaults: function(){
                return{
                    searchResults: null,
                    cesiumGeohash: null
                }
            },

            /**
             * Sets listeners on the CesiumGeohash map asset and the SearchResults. It will get the geohash facet data
             * from the SolrResults and set it on the CesiumGeohash so it can be used by a map view. It also updates the
             * geohash level in the SolrResults so that it can be used by the next query.
             * @since 2.22.0
             */
            startListening: function(){
                this.listenTo(this.get("searchResults"), "reset", function(){
                    //Set the new geohash facet counts on the CesiumGeohash MapAsset
                    let level = this.get("cesiumGeohash").get("geohashLevel");
                    this.get("cesiumGeohash").set("geohashCounts", this.get("searchResults").facetCounts["geohash_"+level] );
                    this.get("cesiumGeohash").set("totalCount", this.get("searchResults").getNumFound() );

                    //Set the status of the CesiumGeohash MapAsset to 'ready' so that it is re-rendered
                    if(this.get("cesiumGeohash").get("status") == "ready"){
                        this.get("cesiumGeohash").trigger("change:status");
                    }
                    else{
                        this.get("cesiumGeohash").set("status", "ready");
                    }
                });

                this.listenTo(this.get("cesiumGeohash"), "change:geohashLevel", function(){
                    this.get("searchResults").setFacet(["geohash_"+this.get("cesiumGeohash").get("geohashLevel")]);
                });
            }

      });

    });