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

#ifndef CONTENT_BROWSER_SMS_SMS_PARSER_H_
#define CONTENT_BROWSER_SMS_SMS_PARSER_H_

#include "content/common/content_export.h"
#include "content/public/browser/sms_fetcher.h"
#include "url/origin.h"

namespace content {

// Extracts the origins from SMS messages according to the server-side
// convention of https://github.com/samuelgoto/sms-receiver.
// Returns an empty result if the formatting doesn't match.
class CONTENT_EXPORT SmsParser {
 public:
  // These values are persisted to logs. Entries should not be renumbered and
  // numeric values should never be reused.
  enum class SmsParsingStatus {
    kParsed = 0,
    kOTPFormatRegexNotMatch = 1,
    kHostAndPortNotParsed = 2,
    kGURLNotValid = 3,
    kMaxValue = kGURLNotValid,
  };

  struct CONTENT_EXPORT Result {
    // Creates Result when the parsing has succeeded.
    Result(const url::Origin& top_origin,
           const url::Origin& embedded_origin,
           const std::string& one_time_code);
    // Creates Result when the parsing has failed.
    explicit Result(SmsParsingStatus);
    Result(const Result& other);
    ~Result();

    bool IsValid() const { return parsing_status == SmsParsingStatus::kParsed; }

    // The origin list consists of the origin that made the OTP request followed
    // by its cross-origin ancestor's origin if such an ancestor exists.
    OriginList GetOriginList() const;

    const url::Origin top_origin;
    const url::Origin embedded_origin;
    const std::string one_time_code;
    SmsParsingStatus parsing_status;
  };

  static Result Parse(base::StringPiece sms);
};

}  // namespace content

#endif  // CONTENT_BROWSER_SMS_SMS_PARSER_H_
