// width_layout.proto exercises width-driven flat-vs-broken decisions.
//
// Legacy formatting uses [printer.LayoutStrict]: any multi-element
// scope (compact options, array literal, dict literal) breaks across
// lines regardless of width.
//
// Default formatting uses [printer.LayoutDynamic] with MaxWidth = 100:
// a multi-element source-flat scope stays flat when its rendered width
// fits within the budget and is broken across lines only when it
// exceeds the budget. When a nested scope is forced to break (by
// width or by hard newlines), the break propagates upward through
// any enclosing [dom.Group] so the parent's brackets land on their
// own lines too.
//
// Each construct below appears in two forms — a short case that fits
// within the budget, and a long case that exceeds it — so the two
// presets diverge on the short case and converge on the long case.

syntax = "proto3";

import "custom.proto";

message WidthLayout {
  // Short multi-entry compact options. Default: flat. Legacy: broken.
  string short_opts = 1 [
    deprecated = true,
    json_name = "v1"
  ];

  // Long multi-entry compact options. Both presets: broken.
  string long_opts = 2 [
    deprecated = true,
    json_name = "verbose_field_name_with_descriptive_text",
    debug_redact = false
  ];

  // Short multi-element array literal. Default: flat. Legacy: broken.
  string short_array = 3 [(custom.nums) = {
    values: [
      1,
      2,
      3
    ]
  }];

  // Long multi-element array literal. Both presets break the array.
  // Under Default the inner break propagates upward through the dict
  // and compact options so each closing bracket lands on its own line.
  string long_array = 4 [(custom.nums) = {
    values: [
      100000000,
      200000000,
      300000000,
      400000000,
      500000000,
      600000000,
      700000000,
      800000000,
      900000000,
      1000000000
    ]
  }];

  // Short multi-field dict literal. Default: flat. Legacy: broken.
  string short_dict = 5 [(custom.cfg) = {
    a: 1
    b: 2
  }];

  // Long multi-field dict literal. Under Default, only the outer
  // compact options breaks (the source line exceeds 100 cols); the
  // dict itself fits in the budget at its indented column and stays
  // flat. Under Legacy, the dict breaks too via LayoutStrict's count-
  // based rule.
  string long_dict = 6 [(custom.cfg) = {
    alpha_value: "first"
    bravo_value: "second"
    charlie_value: "third"
  }];
}
