module PinchHitter
  module Message
    module Json
      def json_message(file, overrides={})
        json_file = load_json_file file
        replace_json json_file, overrides
      end

      def valid_json?(json)
        begin
          JSON.parse json
          return true
        rescue
          return false
        end
      end

    private
      def load_json_file(filename)
        IO.read filename
      end

      def replace_json(content, overrides={})
        return content if overrides.empty?
        doc = JSON.parse(content)
        overrides.each do |key, value|
          hash = find_nested_hash(doc, key)
          if has_key(hash, key)
            hash[key] = value
          end
        end
        doc.to_s
      end

      def find_nested_hash(parent, key)
        return parent if has_key(parent, key)
        return nil unless parent.respond_to? :each

        found = nil
        parent.find do |parent_key, child|
          found = find_nested_hash(child, key)
        end
        found
      end

      def has_key(hash, key)
        hash.respond_to?(:key?) && hash.key?(key)
      end

     

    end
  end
end