// Floor dialogue & flavour. Typed const maps, never inline in scene code
// (CONTRACTS.md §7). Tone: Aussie hospitality satire — affectionate, absurd,
// with a moral undertow. Nobody here is a villain; they're just having a night.
//
// NOTE(convention): CONTRACTS.md §7 puts dialogue in `src/data/strings/`, but
// `data/` is LANE-0 territory and lanes commit only inside their owned dirs.
// Parked here; see LANEHANDOVER.md — happy to move it on the reviewer's word.

import type { DrunkStage } from '../../data/types';

/** The three rungs of the cut-off ladder, softest first. */
export type EscalationLine = 'water' | 'done' | 'escort';

export const ESCALATION_LINES: Record<EscalationLine, string> = {
  water: 'Have some water, mate. On the house.',
  done: "Righto — you're done for the night.",
  escort: "Come on. Walk with me. Out you go.",
};

/** What you get back when you pitch it right for their state. */
export const CUTOFF_REPLY_CLEAN: Record<DrunkStage, string> = {
  sober: '"...yeah, nah, cheers?" He drinks the water. Confused, but hydrated.',
  tipsy: '"Aw, legend." She takes the water and means it.',
  loose: '"Yeah fair, fair. Good on ya." He sips it like medicine.',
  messy: '"Nah I get it. I GET it." He shakes your hand for slightly too long.',
  maggot: 'No words. Just a slow, dignified nod, and the walk of the defeated.',
};

/** Too much boot for their state — the whole room watches you overdo it. */
export const CUTOFF_REPLY_SCENE: Record<DrunkStage, string> = {
  sober: '"I have had ONE lemon squash." The booth behind you starts filming.',
  tipsy: '"Mate. MATE. I\'m on my second." Her friends boo you in unison.',
  loose: '"Are you serious? I\'m FINE." He is fine. That\'s the problem.',
  messy: '"Don\'t TOUCH me—" Arms up. Drink goes sideways. Room turns.',
  maggot: 'He goes limp on purpose. All ninety kilos of him. Crowd cheers.',
};

/** Too gentle for their state — they take the water and keep going. */
export const CUTOFF_REPLY_SOFT: Record<DrunkStage, string> = {
  sober: '"Ta." Nothing happened. Nothing was going to happen.',
  tipsy: '"Sweet as." She wanders off, entirely unbothered.',
  loose: '"Yeah yeah, water, love it." Straight back to the bar.',
  messy: '"You\'re a good bloke." He pours the water into a pot plant.',
  maggot: 'He accepts the water, salutes you, and staggers into the dance floor.',
};

/** Muffled through a stall door. They are not coming out politely. */
export const STALL_MUFFLED: readonly string[] = [
  '"Piss off mate, I\'m BUSY."',
  '"Occupied! ...by one person!"',
  '"We are having a private conversation."',
  '"Nobody in here but me and my reflection."',
  '"Two seconds! ...Two more seconds!"',
];

export const STALL_BUSTED: readonly string[] = [
  'The door swings. Two people leave in two directions at four times the speed of sound.',
  'Busted. One goes left, one goes through the smoking door, neither makes eye contact.',
  'They scatter like startled ibises. Someone drops a vape. Nobody comes back for it.',
];

export const STALL_OFF_BEAT = 'Your knuckles land in the gap between kicks. Even the door is embarrassed.';

/** Pat-down patter. Confiscation is a bit, not a punishment. */
export const PATDOWN_INTRO = 'Arms out, mate. You know the drill.';

export const PATDOWN_FOUND: Record<string, string> = {
  baggie: 'Well. That\'s not a mint.',
  flask: 'A hip flask. In this economy.',
  goonSack: 'Sir, this is a licensed venue and that is a pillow of wine.',
  tinnies: 'Two warm tinnies. Warm. That\'s the real crime.',
  kebab: 'An entire kebab. Still wrapped. Honestly? Respect.',
  someoneElsesId: 'This is Kylie. You are not Kylie.',
  budgie: 'That is a live budgie. It is looking at me. Into the bin, mate.',
  vapes: 'Fourteen vapes. Fourteen. Are you a shop?',
  marker: 'Fat marker. We just repainted that cubicle.',
  snags: 'Raw sausages. In your jacket. Why. WHY.',
};

export const PATDOWN_CLEAR = 'Nothing on him. "Told ya," he says, delighted.';
export const PATDOWN_MISSED = 'Time. Whatever\'s left in there walks out the door with him.';

/**
 * Two blokes squaring up. Pub fights start over nothing and everyone involved
 * knows it — keep the stakes stupid so the tension stays funny, and so getting
 * between them reads as defusing a farce, not breaking up a war.
 */
export const FIGHT_CAUSE: readonly string[] = [
  'Someone stepped on someone\'s very white shoe.',
  'A disagreement about whether this song is "the actual version".',
  'One of them called the other one\'s cousin "alright, I guess".',
  'A pool table was, allegedly, next-ed out of turn.',
  'Someone said the kebab shop over the road has "gone downhill".',
  'It is about a text message from 2019.',
];

/** Escalating shove chatter — you hear this before you see anything. */
export const FIGHT_SHOVES: readonly string[] = [
  '"Say it again."',
  '"Nah nah nah, say it AGAIN."',
  '"I\'m not even angry, mate. I\'m not."',
  '"Hold my drink. HOLD it."',
  '"You reckon? You RECKON?"',
];

/** You got between them in time. */
export const FIGHT_BROKEN: readonly string[] = [
  'You step into the gap. Both of them discover they were leaving anyway.',
  'A wall of hi-vis arrives. Suddenly everyone is best mates and very tired.',
  'You say nothing. They remember they have work in the morning.',
];

/** You didn't. */
export const FIGHT_SWUNG: readonly string[] = [
  'The swing lands. So does the drink, the stool, and the mood of the entire room.',
  'One punch, no contact, both on the floor anyway. The room turns on you, not them.',
  'It is over in a second and everyone saw you standing too far away.',
];

/** Kayden, on the radio, when a stampless patron turns up inside. */
export const NO_STAMP_RADIO: readonly string[] = [
  '"Yeah sorry, that one might\'ve been me. Sorry. Sorry."',
  '"He said he was getting his jacket. Forty minutes ago."',
  '"I stamped SOMEONE. Pretty sure I stamped someone."',
];

export const HELP_TEXT =
  'WASD move · TAB uv · E interact · SPACE bang · ESC cancel · R reseed';
