import discord
import os
from datetime import datetime
from discord.ext import commands

from .utils.dataIO import dataIO
from .utils import checks


class Leaver:
    """Creates a goodbye message when people leave"""

    def __init__(self, bot):
        self.bot = bot
        self.path = "data/Fox-Cogs/leaver"
        self.file_path = "data/Fox-Cogs/leaver/leaver.json"
        self.the_data = dataIO.load_json(self.file_path)

    def save_data(self):
        """Saves the json"""
        dataIO.save_json(self.file_path, self.the_data)

    @commands.group(aliases=['setleaver'], pass_context=True, no_pm=True)
    @checks.mod_or_permissions(administrator=True)
    async def leaverset(self, ctx):
        """Adjust leaver settings"""
        
        server = ctx.message.server
        if server.id not in self.the_data:
            self.the_data[server.id] = {}
            self.save_data()

        
        if ctx.invoked_subcommand is None:
            await self.bot.send_cmd_help(ctx)

    @leaverset.command(pass_context=True, no_pm=True)
    async def channel(self, ctx):
        server = ctx.message.server
        if 'CHANNEL' not in self.the_data[server.id]:
            self.the_data[server.id]['CHANNEL'] = ''
        

        self.the_data[server.id]['CHANNEL'] = ctx.message.channel.id
        self.save_data()
        await self.bot.say("Channel set to "+ctx.message.channel.name)

    async def when_leave(self, member):
        server = member.server
        if server.id in self.the_data:
            await self.bot.send_message(server.get_channel(self.the_data[server.id]['CHANNEL']),
                                        str(member) + "(*" + str(member.nick) +"*) has left the server!")
        else:
            await self.bot.send_message(server.default_channel.id, str(member) + " (*" + str(member.nick) +"*) has left the server!")


def check_folders():
    if not os.path.exists("data/Fox-Cogs"):
        print("Creating data/Fox-Cogs folder...")
        os.makedirs("data/Fox-Cogs")

    if not os.path.exists("data/Fox-Cogs/leaver"):
        print("Creating data/Fox-Cogs/leaver folder...")
        os.makedirs("data/Fox-Cogs/leaver")


def check_files():
    if not dataIO.is_valid_json("data/Fox-Cogs/leaver/leaver.json"):
        dataIO.save_json("data/Fox-Cogs/leaver/leaver.json", {})


def setup(bot):
    check_folders()
    check_files()
    q = Leaver(bot)
    bot.add_listener(q.when_leave, "on_member_remove")
    bot.add_cog(q)