"""
Social & Relationship Problem Events
Negative events related to social situations, friendships, and romantic relationships

Events:
- publicEmbarrassment: Hugely embarrassing moment in public
- friendshipBetrayal: Friend talking behind your back
- romanticRejection: Confession of feelings rejected
- breakup: Relationship ending with heartbreak
- socialMediaDrama: Drama on social media involving you
- leftOutOfGroup: Friend group making plans without you
- argumentWithFriend: Big fight with a close friend
- partyDisaster: Party you threw going terribly wrong
"""

import random
from events.base import messageFunction


def publicEmbarrassment(player, type='message'):
    """Hugely embarrassing moment in front of lots of people"""
    fname = 'publicEmbarrassment'
    check = fname not in player.events and player.c.ageYears >= 10 and player.c.ageYears <= 30 and 1 >= random.random()*800
    message = "You had a hugely embarrassing moment in front of lots of people. You want to disappear."

    if check:
        player.events.add(fname)
        player.c.happiness -= 25
        player.c.social -= 20
        player.c.stress += 15  # Confidence proxy - increased stress from embarrassment

    return messageFunction(fname, message, player, check)


def friendshipBetrayal(player, type='message'):
    """Friend has been talking behind your back"""
    fname = 'friendshipBetrayal'
    check = fname not in player.events and player.c.ageYears >= 10 and player.c.ageYears <= 100 and 1 >= random.random()*1000
    message = "You found out a friend has been talking behind your back. You feel hurt and betrayed."

    if check:
        player.events.add(fname)
        player.c.happiness -= 30
        player.c.social -= 20

        # Decrease affinity with a random friend if they exist
        friends = [person for person in player.r if person.title == 'Friend']
        if friends:
            friend = random.choice(friends)
            friend.affinity -= 40

    return messageFunction(fname, message, player, check)


def romanticRejection(player, type='message'):
    """Confessed feelings to someone and got rejected"""
    fname = 'romanticRejection'
    check = fname not in player.events and player.c.ageYears >= 12 and player.c.ageYears <= 30 and 1 >= random.random()*1500
    message = "You confessed your feelings to someone and they rejected you. It stings."

    if check:
        player.events.add(fname)
        player.c.happiness -= 30
        player.c.energy -= 20
        player.c.stress += 20  # Confidence proxy - increased stress from rejection

    return messageFunction(fname, message, player, check)


def breakup(player, type='message'):
    """Relationship ending with heartbreak"""
    fname = 'breakup'

    # Check if player has a partner
    has_partner = player.c.partner is not None
    partner_low_affinity = False

    if has_partner:
        try:
            from functions import get_person
            partner = get_person(player, player.c.partner)
            if partner and partner.affinity < 40:
                partner_low_affinity = True
        except:
            pass

    check = (fname not in player.events and
             player.c.ageYears >= 14 and
             player.c.ageYears <= 100 and
             has_partner and
             partner_low_affinity and
             1 >= random.random()*2000)

    message = "Your relationship ended. You're heartbroken and don't know how to move forward."

    if check:
        player.events.add(fname)
        player.c.happiness -= 40
        player.c.energy -= 30

        # Remove partner relationship
        player.c.partner = None

    return messageFunction(fname, message, player, check)


def socialMediaDrama(player, type='message'):
    """Drama on social media involving you"""
    fname = 'socialMediaDrama'

    # Check if player has social media (age-based proxy since there's no explicit flag)
    # Assuming most people 13+ have social media in modern context
    has_social_media = player.c.ageYears >= 13

    check = (fname not in player.events and
             player.c.ageYears >= 13 and
             player.c.ageYears <= 30 and
             has_social_media and
             1 >= random.random()*1200)

    message = "Drama on social media involving you. Everyone is talking about it and taking sides."

    if check:
        player.events.add(fname)
        player.c.happiness -= 25
        player.c.social -= 25
        player.c.stress += 25

    return messageFunction(fname, message, player, check)


def leftOutOfGroup(player, type='message'):
    """Friend group made plans without you"""
    fname = 'leftOutOfGroup'
    check = fname not in player.events and player.c.ageYears >= 10 and player.c.ageYears <= 25 and 1 >= random.random()*900
    message = "Your friend group made plans without you. You saw the photos and realize you've been excluded."

    if check:
        player.events.add(fname)
        player.c.happiness -= 20
        player.c.social -= 20

    return messageFunction(fname, message, player, check)


def argumentWithFriend(player, type='message'):
    """Big fight with a close friend"""
    fname = 'argumentWithFriend'
    check = fname not in player.events and player.c.ageYears >= 8 and player.c.ageYears <= 100 and 1 >= random.random()*1000
    message = "You had a big fight with a close friend. Things were said that can't be taken back."

    if check:
        player.events.add(fname)
        player.c.happiness -= 20
        player.c.social -= 15

        # Decrease affinity with a random friend if they exist
        friends = [person for person in player.r if person.title == 'Friend']
        if friends:
            friend = random.choice(friends)
            friend.affinity -= 25

    return messageFunction(fname, message, player, check)


def partyDisaster(player, type='message'):
    """Party you threw went terribly wrong"""
    fname = 'partyDisaster'
    check = fname not in player.events and player.c.ageYears >= 16 and player.c.ageYears <= 30 and 1 >= random.random()*2000
    message = "You threw a party and it went terribly wrong. People are talking about it for all the wrong reasons."

    if check:
        player.events.add(fname)
        player.c.happiness -= 25
        player.c.social -= 30
        if player.c.money >= 200:
            player.c.money -= 200
        else:
            # Can't afford full amount
            player.c.money = 0
            player.c.stress += 20  # Additional stress from financial ruin

    return messageFunction(fname, message, player, check)


__all__ = [
    'publicEmbarrassment',
    'friendshipBetrayal',
    'romanticRejection',
    'breakup',
    'socialMediaDrama',
    'leftOutOfGroup',
    'argumentWithFriend',
    'partyDisaster',
]
