import os
import sys
import django
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth import authenticate

# Setup Django environment
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'branch_system.settings')
django.setup()

User = get_user_model()

def check_auth_system():
    email = 'admin@branchbusinessadvance.com'
    password = 'admin123'
    
    print("\n=== Checking Authentication System ===\n")
    
    # 1. Check Django Settings
    print("1. Checking Django Settings...")
    print(f"- DEBUG mode: {settings.DEBUG}")
    print(f"- ALLOWED_HOSTS: {settings.ALLOWED_HOSTS}")
    print(f"- AUTH_USER_MODEL: {settings.AUTH_USER_MODEL}")
    print(f"- Authentication Backends:")
    for backend in settings.AUTHENTICATION_BACKENDS:
        print(f"  • {backend}")
    
    # 2. Check User Model
    print("\n2. Checking User Model...")
    print(f"- Using model: {User._meta.label}")
    print(f"- Fields available:")
    for field in User._meta.fields:
        print(f"  • {field.name}: {field.get_internal_type()}")
    
    # 3. Check Admin User
    print("\n3. Checking Admin User...")
    try:
        user = User.objects.get(email=email)
        print(f"✓ Found user: {user.email}")
        print(f"- Is staff: {user.is_staff}")
        print(f"- Is superuser: {user.is_superuser}")
        print(f"- Is active: {user.is_active}")
        
        # Check password
        if check_password(password, user.password):
            print("✓ Stored password is correct")
        else:
            print("✗ Stored password is incorrect")
            print("Updating password...")
            user.password = make_password(password)
            user.save()
            print("✓ Password updated")
    except ObjectDoesNotExist:
        print(f"✗ No user found with email {email}")
        print("Creating admin user...")
        user = User.objects.create_superuser(
            email=email,
            password=password,
            is_staff=True,
            is_superuser=True
        )
        print("✓ Admin user created")
    
    # 4. Test Authentication
    print("\n4. Testing Authentication...")
    auth_user = authenticate(username=email, password=password)
    if auth_user:
        print("✓ Authentication successful")
        print(f"- Authenticated user: {auth_user.email}")
    else:
        print("✗ Authentication failed")
        print("- This might indicate a problem with the authentication backend")
    
    # 5. Check Session Settings
    print("\n5. Checking Session Settings...")
    print(f"- SESSION_COOKIE_AGE: {settings.SESSION_COOKIE_AGE} seconds")
    print(f"- SESSION_COOKIE_SECURE: {settings.SESSION_COOKIE_SECURE}")
    print(f"- SESSION_EXPIRE_AT_BROWSER_CLOSE: {getattr(settings, 'SESSION_EXPIRE_AT_BROWSER_CLOSE', False)}")
    
    print("\n=== Authentication System Check Complete ===")

if __name__ == '__main__':
    try:
        check_auth_system()
        print("\nScript completed successfully!")
    except Exception as e:
        print(f"\nError occurred: {str(e)}")
        sys.exit(1) 