import os
import discord
from discord.ext import commands
import requests
import base64

# Configuration du bot et des informations d'authentification WordPress
DISCORD_TOKEN = os.getenv('DISCORD_TOKEN')
CHANNEL_ID = int(os.getenv('DISCORD_CHANNEL_ID'))
WORDPRESS_API_URL = 'https://espacepro.info-jeunes.fr/wp-json/wp/v2'
WORDPRESS_USER = os.getenv('WORDPRESS_USER')
WORDPRESS_APP_PASSWORD = os.getenv('WORDPRESS_APP_PASSWORD')

# Encodez les informations d'identification WordPress pour l'authentification
encoded_credentials = base64.b64encode(f"{WORDPRESS_USER}:{WORDPRESS_APP_PASSWORD}".encode('utf-8'))
headers = {'Authorization': f'Basic {encoded_credentials.decode("utf-8")}'}

# Créez une instance du bot Discord
bot = commands.Bot(command_prefix='!')

# Définissez les fonctions de gestion des événements Discord
@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')
    # Obtenez ou créez le tag "Veille discord" et stockez son ID pour une utilisation ultérieure
    bot.veille_discord_tag_id = get_wordpress_tag_id('Veille discord')

@bot.event
async def on_thread_create(thread):
    # Vérifiez si le thread est dans le bon canal (forum)
    if isinstance(thread.parent, discord.ForumChannel) and thread.parent.id == CHANNEL_ID:
        # Créez un post sur WordPress pour ce nouveau thread de forum
        create_wordpress_post(thread.name, bot.veille_discord_tag_id)

# Définissez les fonctions de gestion des tags et des posts WordPress
def get_wordpress_tag_id(tag_name):
    # Envoyez une requête GET pour rechercher le tag par son nom
    response = requests.get(f"{WORDPRESS_API_URL}/tags?search={tag_name}", headers=headers)
    tags = response.json()

    # Si le tag existe déjà, renvoyez son ID
    if response.status_code == 200 and tags:
        return tags[0]['id']

    # Si le tag n'existe pas, créez-le
    if response.status_code == 200 and not tags:
        tag_response = requests.post(
            f"{WORDPRESS_API_URL}/tags",
            headers=headers,
            json={'name': tag_name}
        )
        if tag_response.status_code == 201:
            return tag_response.json()['id']
        else:
            print(f"Failed to create tag: {tag_response.content}")
            return None

def create_wordpress_post(title, tag_id):
    # Configurez les données du post
    post_data = {
        'title': title,
        'status': 'publish',  # ou 'draft' si vous souhaitez revoir le post avant publication
        'tags': [tag_id],  # Utilisez l'ID du tag "Veille discord"
    }

    # Envoyez la requête POST à l'API WordPress pour créer un nouvel article
    response = requests.post(
        f"{WORDPRESS_API_URL}/posts",
        headers=headers,
        json=post_data
    )

    if response.status_code == 201:
        print(f"Post created: {response.json().get('link')}")
    else:
        print(f"Failed to create post: {response.content}")

# Définissez la fonction WSGI pour Passenger
def application(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/plain')]
    start_response(status, headers)

    # Appelez la fonction principale de votre script ici
    bot.run(DISCORD_TOKEN)
    return []
