// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/web_applications/model/localized_text.h"

#include <utility>

#include "base/check.h"
#include "base/values.h"
#include "third_party/blink/public/common/manifest/manifest_util.h"

namespace web_app {

LocalizedText::LocalizedText() = default;

LocalizedText::LocalizedText(
    std::u16string value,
    std::optional<std::u16string> lang,
    std::optional<blink::mojom::Manifest_TextDirection> dir)
    : value_(std::move(value)), lang_(std::move(lang)), dir_(std::move(dir)) {
  CHECK(!value_.empty());
}

LocalizedText::LocalizedText(const LocalizedText&) = default;
LocalizedText& LocalizedText::operator=(const LocalizedText&) = default;
LocalizedText::LocalizedText(LocalizedText&&) = default;
LocalizedText& LocalizedText::operator=(LocalizedText&&) = default;

LocalizedText::~LocalizedText() = default;

bool LocalizedText::empty() const {
  if (lang_.has_value() || dir_.has_value()) {
    CHECK(!value_.empty())
        << "LocalizedText missing a value when lang or dir is populated";
  }
  return value_.empty();
}

base::Value LocalizedText::AsDebugValue() const {
  base::DictValue dict;
  dict.Set("value", value_);
  if (lang_.has_value()) {
    dict.Set("lang", lang_.value());
  }
  if (dir_.has_value()) {
    dict.Set("dir", blink::TextDirectionToString(dir_.value()));
  }
  return base::Value(std::move(dict));
}

}  // namespace web_app
