#!/home/nonroot/event_scrapy/venv/bin/python3

import discord
from datetime import datetime
from discord.ext.tasks import loop
from time import sleep
from settings import get_connection_event, token

intents = discord.Intents.default()
client = discord.Client(intents=intents)

@client.event
async def on_message(message):
    if message.author.bot:
        return
    if client.user.mentioned_in(message):
        wanted_server = None
        if "ze" in message.content.lower():
            wanted_server = 27015
        elif "mg" in message.content.lower():
            wanted_server = 27017
        elif "zr" in message.content.lower():
            wanted_server = 27016
        if wanted_server is None:
            await message.channel.send("You did not specify a server. Either write ZE, MG or ZR.")
            return
        with get_connection_event() as conn:
            with conn.cursor() as cur:
                sql_statement = f"""
                     select 
                        event_title, event_server, event_maps, event_date, event_time, event_reward, event_url 
                     from unloze_event.event where event_server like '%{wanted_server}%'
                """
                cur.execute(sql_statement)
                res = cur.fetchall()
        event_msg = ""
        for res1 in res:
            event_title = res1[0]
            event_server = res1[1]
            event_maps = res1[2]
            event_date = res1[3]
            event_time = res1[4]
            event_reward = res1[5]
            event_url = res1[6]
            event_msg += f"Title: {event_title}\nServer: {event_server}\nMaps: {event_maps}\nDate: {event_date}\nTime: {event_time}\nRewards: {event_reward}\nURL: {event_url}\n\n"
        await message.channel.send(event_msg)

@loop(seconds = 10)
async def discord_task():
    with get_connection_event() as conn:
        with conn.cursor() as cur:
            #only ze needs the cooldowns set
            sql_statement = f"""
                select event_maps, event_date
                from unloze_event.event e 
                where e.set_map_cooldown is null 
                and e.event_server like '%27015%'
            """
            cur.execute(sql_statement)
            res = cur.fetchone()
            if res is not None:
                event_maps = res[0].split(" ")
                event_date = res[1].strip()
                today_formatted = f"{datetime.now():%d-%m-%Y}".replace("-", "/")
                today_hour = int(f"{datetime.now():%H}")
                #print("today_formatted: ", today_formatted)
                #print("event_date: ", event_date)
                if today_formatted == event_date and today_hour > 10:
                    sql_statement = f"""
                        update unloze_event.event 
                        set set_map_cooldown = true 
                        where event_server like '%27015%'
                    """
                    cur.execute(sql_statement)
                    for r in client.get_all_channels():
                        if r.name == 'rcon-css-ze':
                            print("event_maps: ", event_maps)
                            for map in event_maps:
                                #silly white space none sense 
                                if len(map) > 3:
                                    cooldown_msg = f"""sm_nominate_exclude_time {map} 1 0"""
                                    #adding slight delay
                                    sleep(1)
                                    await r.send(cooldown_msg)
                                    conn.commit()

    with get_connection_event() as conn:
        with conn.cursor() as cur:
            sql_statement = f"""
              select 
                     event_title, event_server, event_maps, event_date, event_time, event_reward, event_url 
              from unloze_event.event where posted_event_on_discord is null
            """
            cur.execute(sql_statement)
            res = cur.fetchall()
            if res is not None:
                for res1 in res:
                    event_title = res1[0]
                    event_server = res1[1]
                    event_maps = res1[2]
                    event_date = res1[3]
                    event_time = res1[4]
                    event_reward = res1[5]
                    event_url = res1[6]

                    sql_statement = f"""
                         update unloze_event.event 
                         set posted_event_on_discord = 1 
                         where event_title = %s
                    """
                    cur.execute(sql_statement, [event_title])
                    try:
                        event_msg = f"**- New Event Posted! -**\nTitle: {event_title}\nServer: {event_server}\nMaps: {event_maps}\nDate: {event_date}\nTime: {event_time}\nRewards: {event_reward}\nURL: {event_url}\n\n"
                        for r in client.get_all_channels():
                            if r.name == 'events':
                                await r.send(event_msg)
                                conn.commit()
                    except Exception:
                        import traceback
                        error_msg = traceback.format_exc()
                        print("traceback happened: ", error_msg)

def main():
    discord_task.start()
    client.run(token)

if __name__ == '__main__':
    main()