// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "cobalt/cssom/media_query.h"

#include "base/memory/ref_counted.h"
#include "cobalt/cssom/media_feature.h"

namespace cobalt {
namespace cssom {

// If the media query list is empty (i.e. the declaration is the empty string or
// consists solely of whitespace) it evaluates to true.
//   https://www.w3.org/TR/css3-mediaqueries/#error-handling
MediaQuery::MediaQuery() : evaluated_media_type_(true) {}

MediaQuery::MediaQuery(bool evaluated_media_type)
    : evaluated_media_type_(evaluated_media_type) {}

MediaQuery::MediaQuery(bool evaluated_media_type,
                       scoped_ptr<MediaFeatures> media_features)
    : evaluated_media_type_(evaluated_media_type),
      media_features_(media_features.release()) {}

std::string MediaQuery::media_query() {
  // TODO: Implement serialization of MediaQuery.
  NOTIMPLEMENTED() << "Serialization of MediaQuery not implemented yet.";
  return "";
}

bool MediaQuery::EvaluateConditionValue(const math::Size& viewport_size) {
  if (!evaluated_media_type_) {
    return false;
  }
  if (media_features_) {
    for (MediaFeatures::iterator it = media_features_->begin();
         it != media_features_->end(); ++it) {
      if (!(*it)->EvaluateConditionValue(viewport_size)) {
        return false;
      }
    }
  }
  return true;
}

}  // namespace cssom
}  // namespace cobalt
