// 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.

edition = "2023";

package optimization_guide.proto;

import "components/optimization_guide/proto/features/common_quality_data.proto";

import "components/optimization_guide/proto/model_quality_metadata.proto";

option optimize_for = LITE_RUNTIME;
option java_package = "org.chromium.components.optimization_guide.features.proto";

option java_outer_classname = "EnhancedCalendarProto";

// DO NOT EDIT THIS FILE DIRECTLY!
//
// This file is generated in g3 and then synced to Chrome. Instead, please refer to
// http://go/chrome-mqls-onboarding (Google-internal link), and then changes will
// be synced with Chrome automatically.

message EnhancedCalendarLoggingData {
  // The feature request.
  EnhancedCalendarRequest request = 1 [features = { field_presence: EXPLICIT }];

  // The feature response.
  EnhancedCalendarResponse response = 2 [features = { field_presence: EXPLICIT }];

  // The model execution metadata.
  ModelExecutionInfo model_execution_info = 3 [features = { field_presence: EXPLICIT }];
}

// The request to execute an Enhanced Calendar query.
// Next ID: 8
message EnhancedCalendarRequest {
  // The web page context used for generating the event. Context is expected to
  // contain calendar event dates or related information to populate the
  // calendar description.
  PageContext page_context = 3 [features = { field_presence: EXPLICIT }];

  // The prompt used for generating the event. If the prompt is not provided,
  // the default prompt from the feature config will be used.
  string prompt = 4 [features = { field_presence: IMPLICIT }];

  // The selected text which represents a "moment" (date or time). This will
  // likely be the start date, end date, start time or end time of the event.
  // Used by the model to know which "moment" within the webpage this request
  // refers to.
  string selected_text = 5 [features = { field_presence: IMPLICIT }];

  // The text surrounding the `selected_text` (a longer string which starts
  // before and ends after), used to help locate the specific instance of the
  // selected text on a given webpage.
  string surrounding_text = 6 [features = { field_presence: IMPLICIT }];

  // The user's locale. Format is a BCP 47 language code, e.g. "en-US". This
  // will be used to help infer the format of the dates and times in the page
  // context. If none is provided or if it is invalid, "en-US" will be used.
  string user_locale = 7 [features = { field_presence: IMPLICIT }];

  reserved 1, 2;
}

// The response from executing a Enhanced Calendar query.
// Next ID: 12
message EnhancedCalendarResponse {
  // The model's output title for the calendar event.
  string event_title = 1 [features = { field_presence: IMPLICIT }];

  // The model's output summary for the calendar event.
  string event_summary = 2 [features = { field_presence: IMPLICIT }];

  // The model's output start date for the calendar event (time is separate).
  // Format should be "DD/MM/YYYY". Empty if none could be found.
  string start_date = 3 [features = { field_presence: IMPLICIT }];

  // The model's output end date for the calendar event (time is separate).
  // Format should be "DD/MM/YYYY". Empty if none could be found.
  string end_date = 4 [features = { field_presence: IMPLICIT }];

  // The model's output recurrence state for the calendar event.
  RecurrenceState recurrence = 5 [features = { field_presence: IMPLICIT }];

  // The model's output event location for the calendar event.
  string event_location = 6 [features = { field_presence: IMPLICIT }];

  // The model's output for if the event is an all day event.
  bool is_all_day = 7 [features = { field_presence: IMPLICIT }];

  // The model's output start time for the calendar event (date is separate).
  // Format should be "HH:MM" (in 24hr format). Empty if none could be found, or
  // if the event is an all day event.
  string start_time = 8 [features = { field_presence: IMPLICIT }];

  // The model's output end time for the calendar event (date is separate).
  // Format should be "HH:MM" (in 24hr format). Empty if none could be found, or
  // if the event is an all day event.
  string end_time = 9 [features = { field_presence: IMPLICIT }];

  // The model's output for if the event is explicitly
  // booked/reserved/confirmed.
  bool is_event_booked = 10 [features = { field_presence: IMPLICIT }];

  // The model's output for the event confirmation code, if available.
  string event_confirmation_code = 11 [features = { field_presence: IMPLICIT }];
}

// The recurrence cadence for a repeated calendar event. If there's no
// reoccurrence or there's a reoccurrence that isn't strictly one of the enum
// options, state "STATE_UNSPECIFIED" should be used. Next ID: 6
enum RecurrenceState {
  // An event that is not repeated.
  STATE_UNSPECIFIED = 0;

  // An event that repeats every day.
  STATE_EVERY_DAY = 1;

  // An event that repeats every week.
  STATE_EVERY_WEEK = 2;

  // An event that repeats every two weeks.
  STATE_EVERY_TWO_WEEKS = 3;

  // An event that repeats every month.
  STATE_EVERY_MONTH = 4;

  // An event that repeats every year.
  STATE_EVERY_YEAR = 5;
}
