# commandes/no_link.py
import re
import disnake
from disnake.ext import commands
import json
import os

# Chemins ABSOLUS
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_DIR = os.path.join(BASE_DIR, "..", "data")
SECURITY_FILE = os.path.join(DATA_DIR, "security.json")

# Créer le dossier data/ s'il n'existe pas
os.makedirs(DATA_DIR, exist_ok=True)

def load_guild_security(guild_id: int) -> dict:
    """Retourne la configuration d'un serveur."""
    if not os.path.isfile(SECURITY_FILE):
        return {}
    with open(SECURITY_FILE, "r") as f:
        data = json.load(f)
    return data.get(str(guild_id), {})

# Regex pour détecter les liens
URL_REGEX = re.compile(r"(?i)\b((?:https?://|www\.)[^\s<>]+)\b")

class NoLink(commands.Cog):
    """Supprime les messages contenant un lien si l'option anti_link est activée pour le serveur."""

    def __init__(self, bot: commands.Bot) -> None:
        self.bot = bot

    @commands.Cog.listener()
    async def on_message(self, message: disnake.Message) -> None:
        if message.author.bot or not message.guild:
            return

        guild_settings = load_guild_security(message.guild.id)
        if not guild_settings.get("anti_link", False):
            return  # Option désactivée → ne rien faire

        if URL_REGEX.search(message.content):
            try:
                await message.delete()
                await message.channel.send(
                    f"{message.author.mention} ⚠️ Les liens sont interdits sur ce serveur.",
                    delete_after=5
                )
            except disnake.Forbidden:
                print(f"Impossible de supprimer le message de {message.author} (permissions manquantes).")
            except Exception as exc:
                print(f"Erreur lors de la suppression du message : {exc}")


def setup(bot: commands.Bot) -> None:
    bot.add_cog(NoLink(bot))
