-- Client-only presentation of the cabinets: which prop is spawned, the target option, the map
-- blip, what the player's ped does while playing, and the watchdog that closes the arcade.
return {
    -- Our SMASHDOWN cabinet ships in stream/. Keep the stock models as fallbacks.
    -- Groups can override this order with their own `models` list.
    Models = { 'sd_brawl_arcade', 'ch_prop_arcade_street_01a', 'prop_arcade_01' },

    -- Degrees added to every seat's heading when the prop spawns. If your cabinets face the wall
    -- instead of the room, set 180.0 rather than editing every seat.
    HeadingOffset = 0.0,

    -- Metres from a group at which its props spawn (and despawn again). Props are local, frozen,
    -- non-networked objects, so this is purely a streaming/perf knob.
    SpawnDistance = 60.0,

    -- The "Play" option on each cabinet (ox_target / qb-target / qtarget via the bridge).
    Target = {
        Icon = 'fa-solid fa-gamepad', -- Font Awesome icon class
        Distance = 1.8, -- metres the option is reachable from (ox_target; qb-target uses its own default)
    },

    -- Default blip for groups with `blip = true`. Sprite/colour ids: docs.fivem.net/docs/game-references/blips
    Blip = {
        sprite = 740, -- 740 = arcade joystick
        color = 27, -- 27 = purple
        scale = 0.75, -- icon size
        shortRange = true, -- only on the minimap when nearby
        label = nil, -- nil = the group's label
    },

    -- The pose while playing. The ped turns to face the cabinet and loops this clip. If the
    -- dictionary is missing from the game files the pose is skipped - the arcade still opens.
    Anim = {
        Enabled = true,
        Dict = 'anim_casino_a@amb@casino@games@arcadecabinet@maleleft',
        Clip = 'playidle_v1',
        Flag = 1, -- 1 = loop the full body (controls are with the UI while playing anyway)
    },

    -- The sit-down: pressing Play glides a camera onto the cabinet's screen, the screen powers on
    -- (CRT line -> picture) and boots (a short system check that also warms the arcade up, so the
    -- first open doesn't stutter), then the title comes up. Leaving powers the screen off and eases
    -- the camera back. Enabled = false: the arcade appears and disappears at once, as before.
    Intro = {
        Enabled = true,
        -- The close-up, in the cabinet's own space (metres; its screen faces the prop's front).
        -- Tune these if your cabinet model differs from the SMASHDOWN one in stream/.
        Camera = {
            Distance = 0.92, -- camera distance in front of the cabinet's origin
            Height = 1.62, -- camera height above the cabinet's base
            LookHeight = 1.495, -- height of the screen's centre (what the camera looks at)
            ScreenForward = 0.106, -- how far in front of the origin the screen's face is
            Fov = 40.0, -- vertical field of view of the close-up (degrees)
            InMs = 1100, -- glide from the gameplay camera to the close-up (ease in-out)
            OutMs = 800, -- ease back after leaving through the arcade's EXIT / BACK
            ForcedOutMs = 300, -- ease back when the arcade is closed on you (died, vehicle, walked off)
        },
        HideHud = true, -- hide the radar and HUD while the camera is on the cabinet
        HidePed = true, -- hide your own ped (only for you) when the camera would be inside it or behind it
        -- The screen's boot after the power-on:
        --   'full'  = the system check the first time after a (re)start, a short one after that
        --   'short' = always the short one (logo + 2 lines, ~0.5 s)
        --   'off'   = straight from the power-on to the title screen
        Boot = 'full',
    },

    -- Closes the arcade (forfeiting a running match) when the player dies, gets in a vehicle, or
    -- ends up further than config.Cabinets.SeatRange from their cabinet. The server runs its own
    -- range sweep too, so disabling this only makes the client slower to notice.
    Watchdog = {
        IntervalMs = 500, -- how often the checks run while the arcade is open
    },

    -- Milliseconds the client waits for the server to answer any arcade request before giving
    -- up (the UI then shows its generic error instead of hanging).
    RequestTimeoutMs = 10000,
}
