/**
 * Positive Random Events
 * Lucky, positive surprise events
 */

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

export function foundAPenny(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'foundAPenny';
  const check = !player.askedQuestions.has(fname) &&
    player.character.ageYears > 5 &&
    checkProbability(1000000);

  if (check) {
    player.askedQuestions.add(fname);
  }

  return createQuestionEvent(
    fname,
    "You see something shiny on the ground. Do you pick it up?",
    player,
    check,
    { answerOptions: ['Pick it up', 'Leave it on the ground'] }
  );
}

export function freeConcert(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'freeConcert';
  const check = !player.askedQuestions.has(fname) &&
    player.character.ageYears >= 14 &&
    player.character.ageYears < 100 &&
    checkProbability(1000);

  if (check) {
    player.askedQuestions.add(fname);
  }

  return createQuestionEvent(
    fname,
    "Your favorite Band is coming to town and tickets are pricey. You see that there is an enter-to-win competition online. Do you want to enter?",
    player,
    check,
    { answerOptions: ['Yes', 'No'] }
  );
}

export function foundMoneyStreet(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'foundMoneyStreet';
  const check = !player.events.has(fname) &&
    player.character.ageYears >= 8 &&
    player.character.ageYears <= 100 &&
    checkProbability(5000);

  if (check) {
    player.events.add(fname);
    player.character.money += 20;
    player.character.happiness += 10;
  }

  return createMessageEvent(
    fname,
    "You found a $20 bill on the sidewalk! Lucky day!",
    player,
    check
  );
}

export function freeUpgrade(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'freeUpgrade';
  const check = !player.events.has(fname) &&
    player.character.ageYears >= 16 &&
    player.character.ageYears <= 100 &&
    checkProbability(8000);

  if (check) {
    player.events.add(fname);
    player.character.happiness += 15;
  }

  const messages = [
    "The coffee shop gave you a free drink!",
    "Your flight got upgraded to first class!",
    "You won a raffle you forgot you entered!",
    "Your food order came with extra fries!"
  ];
  const message = messages[Math.floor(Math.random() * messages.length)];

  return createMessageEvent(fname, message, player, check);
}

export function unexpectedCompliment(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'unexpectedCompliment';
  const check = !player.events.has(fname) &&
    player.character.ageYears >= 10 &&
    player.character.ageYears <= 100 &&
    checkProbability(6000);

  if (check) {
    player.events.add(fname);
    player.character.happiness += 10;
    player.character.social += 5;
  }

  return createMessageEvent(
    fname,
    "A stranger complimented you today. It really made your day!",
    player,
    check
  );
}

export function rainbowSighting(player: Player, _type: 'message' | 'question' = 'message'): EventResult {
  const fname = 'rainbowSighting';
  const check = !player.events.has(fname) &&
    player.character.ageYears >= 3 &&
    player.character.ageYears <= 100 &&
    checkProbability(10000);

  if (check) {
    player.events.add(fname);
    player.character.happiness += 10;
  }

  return createMessageEvent(
    fname,
    "You saw a beautiful double rainbow today. You stopped to appreciate it.",
    player,
    check
  );
}
