def get_countries_data():
    return {
        'Albania': {
            'eventName': 'Festivali i Këngës',
            'watchLink': 'https://www.rtsh.al/rtsh-live/RTSH1-HD.html',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["FiK"]
        },
        'Andorra': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Armenia': {
            'eventName': 'Depi Evratesil',
            'watchLink': 'https://www.1tv.am/en/',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Australia': {
            'eventName': 'Australia Decides',
            'watchLink': '-',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Austria': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Azerbaijan': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Belarus': {
            'eventName': 'Eurofest',
            'watchLink': 'https://www.tvr.by/televidenie/belarus-1/',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Belgium': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Bosnia and Herzegovina': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Bulgaria': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Croatia': {
            'eventName': 'Dora',
            'watchLink': 'https://hrti.hrt.hr/live/tv?channel=40013 or HRTi OTT smartphone app - account required',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Cyprus': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Czech Republic':  {
            'eventName': 'Eurovision Song CZ',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["ESCZ"]
        },
        'Denmark': {
            'eventName': 'Dansk Melodi Grand Prix',
            'watchLink': 'https://www.dr.dk/tv/live/dr1',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["DMGP"]
        },
        'Estonia': {
            'eventName': 'Eesti Laul',
            'watchLink': 'otse.err.ee/k/etv',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Finland': {
            'eventName': 'Uuden Musiikin Kilpailu',
            'watchLink': 'https://areena.yle.fi/tv/ohjelmat/yle-tv1',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["UMK"]
        },
        'France': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Georgia': {
            'eventName': 'Georgian Idol',
            'watchLink': '-',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Germany': {
            'eventName': 'Unser Lied für ',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Greece': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Hungary': {
            'eventName': 'A Dal',
            'watchLink': '-',
            'stages': ['Heat...', 'Semi-final 1', 'Semi-final 2', 'Final'],
            "altEventNames": ["-"]
        },
        'Iceland': {
            'eventName': 'Söngvakeppnin',
            'watchLink': 'https://www.ruv.is/sjonvarp/beint?channel=ruv',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Ireland': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Israel': {
            'eventName': '-',
            'watchLink': 'https://www.kan.org.il/live/tv.aspx?stationid=2',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Italy': {
            'eventName': 'Festival di Sanremo',
            'watchLink': 'https://www.raiplay.it/dirette/rai1',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["Sanremo"]
        },
        'Latvia': {
            'eventName': 'Supernova',
            'watchLink': 'https://ltv.lsm.lv/lv/tieshraide/ltv1/live.360/',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Lithuania': {
            'eventName': 'Pabandom iš naujo',
            'watchLink': 'lrt.lt/mediateka/tiesiogiai/lrt-televizija',
            'stages': ['Heat...', 'Semi-final 1', 'Semi-final 2', 'Final'],
            "altEventNames": ["PiN"]
        },
        'Luxembourg': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Malta': {
            'eventName': 'X Factor Malta',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Moldova': {
            'eventName': 'O melodie pentru Europa',
            'watchLink': 'http://www.trm.md/ro/moldova-1',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["OMPE"]
        },
        'Monaco': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Montenegro': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Morocco': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Netherlands': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'North Macedonia': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Norway': {
            'eventName': 'Melodi Grand Prix',
            'watchLink': 'nrk.no/mgp',
            'stages': ['Heat...', 'Final'],
            "altEventNames": ["MGP"]
        },
        'Poland': {
            'eventName': 'Szansa na Sukces',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Portugal': {
            'eventName': 'Festival da Canção',
            'watchLink': 'https://www.rtp.pt/play/direto/rtp1',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["FdC"]
        },
        'Romania': {
            'eventName': 'Selecția Națională',
            'watchLink': 'https://www.tvrplus.ro/',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Russia': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'San Marino': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Serbia': {
            'eventName': 'Beovizija',
            'watchLink': 'RTS Svet (https://rtsplaneta.rs/linear/16889 or RTS Planeta app - account required)',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["-"]
        },
        'Slovakia': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Slovenia': {
            'eventName': 'EMA',
            'watchLink': 'https://4d.rtvslo.si/zivo/tvs1',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Spain': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Sweden': {
            'eventName': 'Melodifestivalen',
            'watchLink': 'https://www.svtplay.se/melodifestivalen',
            'stages': ['Heat...', 'Andra Chansen', 'Final'],
            "altEventNames": ["Mello", "Melfest"]
        },
        'Switzerland': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Turkey': {
            'eventName': '-',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["-"]
        },
        'Ukraine': {
            'eventName': 'Vidbir (Natsionalnyi Vidbir na Yevrobachennia)',
            'watchLink': 'https://www.youtube.com/channel/UCPY6gj8G7dqwPxg9KwHrj5Q',
            'stages': ['Semi-final...', 'Final'],
            "altEventNames": ["Vidbir"]
        },
        'United Kingdom': {
            'eventName': 'Eurovision: You Decide',
            'watchLink': '-',
            'stages': ['Night...', 'Final'],
            "altEventNames": ["You Decide"]
        }
    }


def generate_event_stages(events_len, stages, country):
    repetition_idx = -1
    repetition_expression_count = len(list(filter(lambda s: s.endswith('...'), stages)))

    if repetition_expression_count == 0 and events_len > len(stages):
        print("Less stages defined than events, check referential data for {}. Default used: [Night..., Final]".format(country))
        stages = ['Night...', 'Final']
    elif repetition_expression_count > 1:
        print("More than one repetition stage found, check referential data for {}. Default used: [Night..., Final]".format(country))
        stages = ['Night...', 'Final']
    try:
        repetition_idx = stages.index(next(s for s in stages if s.endswith('...')))
    except StopIteration:
        pass

    repetition_count = events_len - len(list(filter(lambda s: not s.endswith('...'), stages)))
    generated_stages = []

    for i in range(0, repetition_idx):
        generated_stages.append(stages[i])

    for i in range(0, repetition_count):
        generated_stages.append(stages[repetition_idx].replace('...', ' ' + str(i+1) if repetition_count > 1 else ''))

    for i in range(repetition_idx+1, len(stages)):
        generated_stages.append(stages[i])

    if events_len < len(generated_stages):
        event_stages = []
        for i in range(events_len, 0, -1):
            event_stages.insert(0, generated_stages[i])
        return event_stages
    else:
        return generated_stages