// Copyright 2022 Google LLC
//
// 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.

syntax = "proto3";

package google.ads.googleads.v12.resources;

import "google/ads/googleads/v12/enums/hotel_reconciliation_status.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";

option csharp_namespace = "Google.Ads.GoogleAds.V12.Resources";
option go_package = "google.golang.org/genproto/googleapis/ads/googleads/v12/resources;resources";
option java_multiple_files = true;
option java_outer_classname = "HotelReconciliationProto";
option java_package = "com.google.ads.googleads.v12.resources";
option objc_class_prefix = "GAA";
option php_namespace = "Google\\Ads\\GoogleAds\\V12\\Resources";
option ruby_package = "Google::Ads::GoogleAds::V12::Resources";

// Proto file describing the hotel reconciliation resource.

// A hotel reconciliation. It contains conversion information from Hotel
// bookings to reconcile with advertiser records. These rows may be updated
// or canceled before billing through Bulk Uploads.
message HotelReconciliation {
  option (google.api.resource) = {
    type: "googleads.googleapis.com/HotelReconciliation"
    pattern: "customers/{customer_id}/hotelReconciliations/{commission_id}"
  };

  // Immutable. The resource name of the hotel reconciliation.
  // Hotel reconciliation resource names have the form:
  //
  // `customers/{customer_id}/hotelReconciliations/{commission_id}`
  string resource_name = 1 [
    (google.api.field_behavior) = IMMUTABLE,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/HotelReconciliation"
    }
  ];

  // Required. Output only. The commission ID is Google's ID for this booking. Every booking event is
  // assigned a Commission ID to help you match it to a guest stay.
  string commission_id = 2 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.field_behavior) = OUTPUT_ONLY
  ];

  // Output only. The order ID is the identifier for this booking as provided in the
  // 'transaction_id' parameter of the conversion tracking tag.
  string order_id = 3 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The resource name for the Campaign associated with the conversion.
  string campaign = 11 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.resource_reference) = {
      type: "googleads.googleapis.com/Campaign"
    }
  ];

  // Output only. Identifier for the Hotel Center account which provides the rates for the
  // Hotel campaign.
  int64 hotel_center_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Unique identifier for the booked property, as provided in the Hotel Center
  // feed. The hotel ID comes from the 'ID' parameter of the conversion tracking
  // tag.
  string hotel_id = 5 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Check-in date recorded when the booking is made. If the check-in date is
  // modified at reconciliation, the revised date will then take the place of
  // the original date in this column. Format is YYYY-MM-DD.
  string check_in_date = 6 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Check-out date recorded when the booking is made. If the check-in date is
  // modified at reconciliation, the revised date will then take the place of
  // the original date in this column. Format is YYYY-MM-DD.
  string check_out_date = 7 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Required. Output only. Reconciled value is the final value of a booking as paid by the guest. If
  // original booking value changes for any reason, such as itinerary changes or
  // room upsells, the reconciled value should be the full final amount
  // collected. If a booking is canceled, the reconciled value should include
  // the value of any cancellation fees or non-refundable nights charged. Value
  // is in millionths of the base unit currency. For example, $12.35 would be
  // represented as 12350000. Currency unit is in the default customer currency.
  int64 reconciled_value_micros = 8 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.field_behavior) = OUTPUT_ONLY
  ];

  // Output only. Whether a given booking has been billed. Once billed, a booking can't be
  // modified.
  bool billed = 9 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Required. Output only. Current status of a booking with regards to reconciliation and billing.
  // Bookings should be reconciled within 45 days after the check-out date.
  // Any booking not reconciled within 45 days will be billed at its original
  // value.
  google.ads.googleads.v12.enums.HotelReconciliationStatusEnum.HotelReconciliationStatus status = 10 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.field_behavior) = OUTPUT_ONLY
  ];
}
