from django.core.management.base import BaseCommand
from django.contrib.sites.models import Site
from allauth.socialaccount.models import SocialApp
from dotenv import load_dotenv
import os

class Command(BaseCommand):
    help = 'Sets up social authentication apps'

    def handle(self, *args, **kwargs):
        # Load environment variables
        load_dotenv()

        # Get environment variables
        google_client_id = os.getenv('GOOGLE_CLIENT_ID')
        google_client_secret = os.getenv('GOOGLE_CLIENT_SECRET')
        discord_client_id = os.getenv('DISCORD_CLIENT_ID')
        discord_client_secret = os.getenv('DISCORD_CLIENT_SECRET')

        if not all([google_client_id, google_client_secret, discord_client_id, discord_client_secret]):
            self.stdout.write(self.style.ERROR('Missing required environment variables'))
            return

        # Get or create the default site
        site, _ = Site.objects.get_or_create(
            id=1,
            defaults={
                'domain': 'localhost:8000',
                'name': 'localhost'
            }
        )

        # Set up Google
        google_app, created = SocialApp.objects.get_or_create(
            provider='google',
            defaults={
                'name': 'Google',
                'client_id': google_client_id,
                'secret': google_client_secret,
            }
        )
        if not created:
            google_app.client_id = google_client_id
            google_app.secret = google_client_secret
            google_app.save()
        google_app.sites.add(site)

        # Set up Discord
        discord_app, created = SocialApp.objects.get_or_create(
            provider='discord',
            defaults={
                'name': 'Discord',
                'client_id': discord_client_id,
                'secret': discord_client_secret,
            }
        )
        if not created:
            discord_app.client_id = discord_client_id
            discord_app.secret = discord_client_secret
            discord_app.save()
        discord_app.sites.add(site)

        self.stdout.write(self.style.SUCCESS('Successfully set up social auth apps'))
