/**
 * Additional Random Events - Ported from Python ws/events/random/
 * Events that were missing from the TypeScript codebase
 *
 * Events ported:
 * - perfectParkingSpot: Finding the perfect parking spot (positive)
 * - socialMediaCanceled: Being 'cancelled' on social media (negative)
 *
 * NOTE: The following events were already ported to other modules:
 * - accountHacked: server/src/events/negative/crisis.ts
 * - badRestaurantExperience: server/src/events/negative/dailyLife.ts
 * - carCrash: server/src/events/negative/crisis.ts
 * - lowAffinity: server/src/events/negative/social.ts
 * - ruinedClothes: server/src/events/negative/dailyLife.ts
 */

import { Player } from '../../models/Player';
import { createMessageEvent, checkProbability, modifyStat, type EventResult } from '../base';

/**
 * Perfect parking spot - finding an ideal spot right when arriving
 * Requires player to be able to drive, ages 16+
 * A small positive random event for drivers
 */
export function perfectParkingSpot(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'perfectParkingSpot';
  const check = !player.events.has(fname) &&
    player.character.ageYears >= 16 &&
    player.character.ageYears <= 100 &&
    player.character.canDrive &&
    checkProbability(7000);

  if (check) {
    player.events.add(fname);
    player.character.happiness = modifyStat(player.character.happiness, 5);
  }

  return createMessageEvent(
    fname,
    "Right as you arrived, someone pulled out of the perfect parking spot. It's the little things!",
    player,
    check
  );
}

/**
 * Social media canceled - being 'cancelled' on social media
 * Requires social media, ages 16-40, lower probability
 * A more severe social media negative event
 */
export function socialMediaCanceled(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'socialMediaCanceled';
  const hasSocialMedia = player.character.hasSocialMedia ?? false;
  const check = !player.events.has(fname) &&
    player.character.ageYears >= 16 &&
    player.character.ageYears <= 40 &&
    hasSocialMedia &&
    checkProbability(2000);

  if (check) {
    player.events.add(fname);
    player.character.happiness = modifyStat(player.character.happiness, -35);
    player.character.social = modifyStat(player.character.social, -30);
    player.character.stress = modifyStat(player.character.stress, 40);
  }

  return createMessageEvent(
    fname,
    "You're being 'cancelled' on social media. People you don't know are attacking you.",
    player,
    check
  );
}
