; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;

; These are settings that are company-wide. Meaning that if 1 player in a
; company changes them, it changes for all players.

[pre-amble]
static void UpdateAllServiceInterval(int32 new_value);
static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value);
static void UpdateServiceInterval(VehicleType type, int32 new_value);

static const SettingTable _company_settings{
[post-amble]
};
[templates]
SDT_BOOL = SDT_BOOL(CompanySettings, $var,        $flags, $def,                        $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
SDT_VAR  =  SDT_VAR(CompanySettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname),
SDT_NULL =  SDT_NULL($length, $from, $to, $extver),

[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CompanySettings.$var exceeds storage size");

[defaults]
flags    = SF_PER_COMPANY
interval = 0
str      = STR_NULL
strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
strval   = STR_NULL
pre_cb   = nullptr
post_cb  = nullptr
guiproc  = nullptr
load     = nullptr
from     = SL_MIN_VERSION
to       = SL_MAX_VERSION
cat      = SC_ADVANCED
startup  = false
extver   = SlXvFeatureTest()
patxname = nullptr



[SDT_BOOL]
var      = engine_renew
def      = true
str      = STR_CONFIG_SETTING_AUTORENEW_VEHICLE
strhelp  = STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT
cat      = SC_BASIC

[SDT_VAR]
var      = engine_renew_months
type     = SLE_INT16
flags    = SF_PER_COMPANY | SF_GUI_NEGATIVE_IS_SPECIAL
def      = 6
min      = -12
max      = 12
str      = STR_CONFIG_SETTING_AUTORENEW_MONTHS
strhelp  = STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT
strval   = STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE

[SDT_VAR]
var      = engine_renew_money
type     = SLE_UINT
flags    = SF_PER_COMPANY | SF_GUI_CURRENCY
def      = 100000
min      = 0
max      = 2000000
str      = STR_CONFIG_SETTING_AUTORENEW_MONEY
strhelp  = STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT
strval   = STR_JUST_CURRENCY_LONG

[SDT_BOOL]
var      = renew_keep_length
def      = false

;; allow_autoreplace_to_self
[SDT_NULL]
length   = 1
extver   = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)

[SDT_BOOL]
var      = vehicle.servint_ispercent
def      = false
str      = STR_CONFIG_SETTING_SERVINT_ISPERCENT
strhelp  = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
post_cb  = UpdateAllServiceInterval

[SDT_VAR]
var      = vehicle.servint_trains
type     = SLE_UINT16
flags    = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
def      = 150
min      = 5
max      = 800
str      = STR_CONFIG_SETTING_SERVINT_TRAINS
strhelp  = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); }
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); }

[SDT_VAR]
var      = vehicle.servint_roadveh
type     = SLE_UINT16
flags    = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
def      = 150
min      = 5
max      = 800
str      = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES
strhelp  = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); }
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); }

[SDT_VAR]
var      = vehicle.servint_ships
type     = SLE_UINT16
flags    = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
def      = 360
min      = 5
max      = 800
str      = STR_CONFIG_SETTING_SERVINT_SHIPS
strhelp  = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); }
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); }

[SDT_VAR]
var      = vehicle.servint_aircraft
type     = SLE_UINT16
flags    = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
def      = 100
min      = 5
max      = 800
str      = STR_CONFIG_SETTING_SERVINT_AIRCRAFT
strhelp  = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT
strval   = STR_CONFIG_SETTING_SERVINT_VALUE
pre_cb   = [](auto new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); }
post_cb  = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); }

[SDT_BOOL]
base     = CompanySettings
var      = vehicle.auto_timetable_by_default
flags    = SF_PER_COMPANY
def      = false
str      = STR_CONFIG_SETTING_AUTO_TIMETABLE_BY_DEFAULT
strhelp  = STR_CONFIG_SETTING_AUTO_TIMETABLE_BY_DEFAULT_HELPTEXT
patxname = ""vehicle.auto_timetable_by_default""

[SDT_BOOL]
base     = CompanySettings
var      = vehicle.auto_separation_by_default
flags    = SF_PER_COMPANY
def      = true
str      = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_BY_DEFAULT
strhelp  = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_BY_DEFAULT_HELPTEXT
patxname = ""vehicle.auto_separation_by_default""

[SDT_VAR]
base     = CompanySettings
var      = auto_timetable_separation_rate
type     = SLE_UINT8
flags    = SF_PER_COMPANY
def      = 40
min      = 0
max      = 100
interval = 10
str      = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE
strhelp  = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE_HELPTEXT
strval   = STR_CONFIG_SETTING_PERCENTAGE
cat      = SC_EXPERT
patxname = ""auto_timetable_separation_rate""

[SDT_VAR]
base     = CompanySettings
var      = timetable_autofill_rounding
type     = SLE_UINT16
flags    = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL
def      = 0
min      = 0
max      = 1000
interval = 10
str      = STR_CONFIG_SETTING_TIMETABLE_AUTOFILL_ROUNDING_TICKS
strhelp  = STR_CONFIG_SETTING_TIMETABLE_AUTOFILL_ROUNDING_TICKS_HELPTEXT
strval   = STR_CONFIG_SETTING_TIMETABLE_AUTOFILL_ROUNDING_TICKS_VALUE
cat      = SC_EXPERT
patxname = ""timetable_autofill_rounding""

[SDT_VAR]
base     = CompanySettings
var      = order_occupancy_smoothness
type     = SLE_UINT8
flags    = SF_PER_COMPANY
def      = 75
min      = 0
max      = 100
interval = 10
str      = STR_CONFIG_OCCUPANCY_SMOOTHNESS
strhelp  = STR_CONFIG_OCCUPANCY_SMOOTHNESS_HELPTEXT
strval   = STR_CONFIG_SETTING_PERCENTAGE
cat      = SC_EXPERT
patxname = ""order_occupancy_smoothness""

[SDT_BOOL]
base     = CompanySettings
var      = infra_others_buy_in_depot[0]
flags    = SF_PER_COMPANY
def      = false
str      = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_RAIL
patxname = ""infra_sharing.infra_others_buy_in_depot.rail""

[SDT_BOOL]
base     = CompanySettings
var      = infra_others_buy_in_depot[1]
flags    = SF_PER_COMPANY
def      = false
str      = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_ROAD
patxname = ""infra_sharing.infra_others_buy_in_depot.road""

[SDT_BOOL]
base     = CompanySettings
var      = infra_others_buy_in_depot[2]
flags    = SF_PER_COMPANY
def      = false
str      = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_WATER
patxname = ""infra_sharing.infra_others_buy_in_depot.water""

[SDT_BOOL]
base     = CompanySettings
var      = infra_others_buy_in_depot[3]
flags    = SF_PER_COMPANY
def      = false
str      = STR_CONFIG_SETTING_INFRA_OTHERS_BUY_IN_DEPOT_AIR
patxname = ""infra_sharing.infra_others_buy_in_depot.air""


[SDT_BOOL]
base     = CompanySettings
var      = advance_order_on_clone
flags    = SF_PER_COMPANY
def      = false
str      = STR_CONFIG_SETTING_ADVANCE_ORDER_ON_CLONE
strhelp  = STR_CONFIG_SETTING_ADVANCE_ORDER_ON_CLONE_HELPTEXT
patxname = ""advance_order_on_clone""

[SDT_BOOL]
base     = CompanySettings
var      = copy_clone_add_to_group
flags    = SF_PER_COMPANY
def      = true
str      = STR_CONFIG_SETTING_COPY_CLONE_ADD_TO_GROUP
strhelp  = STR_CONFIG_SETTING_COPY_CLONE_ADD_TO_GROUP_HELPTEXT
patxname = ""copy_clone_add_to_group""

[SDT_VAR]
base     = CompanySettings
var      = old_simulated_wormhole_signals
type     = SLE_UINT8
flags    = SF_PER_COMPANY
def      = 4
min      = 1
max      = 16
str      = STR_CONFIG_SETTING_SIMULATE_SIGNALS
strhelp  = STR_CONFIG_SETTING_SIMULATE_SIGNALS_HELPTEXT
strval   = STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE
cat      = SC_ADVANCED
extver   = SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 1, 9)
patxname = ""simulated_wormhole_signals""
