#!/usr/bin/env python
"""
Script to create admin users:
1. Project Manager (Super Admin)
2. Place Manager (Place Admin)
"""
import os
import sys
import django

# Setup Django
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.development')
django.setup()

from accounts.models import User, UserRole, PlaceAdmin
from places.models import Place, Category, Governorate
from django.contrib.auth.hashers import make_password

def create_project_manager():
    """Create Project Manager (Super Admin)"""
    username = 'project_manager'
    email = 'project.manager@daleeli.iq'
    password = 'ProjectManager2024!'
    
    user, created = User.objects.get_or_create(
        username=username,
        defaults={
            'email': email,
            'password': make_password(password),
            'role': UserRole.SUPER_ADMIN,
            'is_staff': True,
            'is_superuser': True,
            'is_active': True,
            'is_verified': True,
            'email_verified': True,
            'first_name': 'Project',
            'last_name': 'Manager',
        }
    )
    
    if created:
        print(f"✅ تم إنشاء حساب مدير المشروع:")
        print(f"   Username: {username}")
        print(f"   Email: {email}")
        print(f"   Password: {password}")
        print(f"   Role: {user.get_role_display()}")
    else:
        print(f"⚠️  حساب مدير المشروع موجود بالفعل:")
        print(f"   Username: {username}")
        print(f"   Email: {user.email}")
    
    return user

def create_place_manager():
    """Create Place Manager (Place Admin)"""
    username = 'place_manager'
    email = 'place.manager@daleeli.iq'
    password = 'PlaceManager2024!'
    
    # Create or get user
    user, user_created = User.objects.get_or_create(
        username=username,
        defaults={
            'email': email,
            'password': make_password(password),
            'role': UserRole.PLACE_ADMIN,
            'is_staff': False,
            'is_superuser': False,
            'is_active': True,
            'is_verified': True,
            'email_verified': True,
            'first_name': 'Place',
            'last_name': 'Manager',
        }
    )
    
    if user_created:
        print(f"\n✅ تم إنشاء حساب مدير المكان:")
        print(f"   Username: {username}")
        print(f"   Email: {email}")
        print(f"   Password: {password}")
        print(f"   Role: {user.get_role_display()}")
    else:
        print(f"\n⚠️  حساب مدير المكان موجود بالفعل:")
        print(f"   Username: {username}")
        print(f"   Email: {user.email}")
    
    # Get or create a governorate first
    governorate, gov_created = Governorate.objects.get_or_create(
        code='BAG',
        defaults={
            'name': 'Baghdad',
            'name_ar': 'بغداد',
            'name_ku': 'Bexdad',
            'name_en': 'Baghdad',
        }
    )
    
    # Get or create a category first
    category, category_created = Category.objects.get_or_create(
        name_ar='مطاعم',
        defaults={
            'name': 'Restaurants',
            'name_ku': 'Restorant',
            'name_en': 'Restaurants',
            'slug': 'restaurants',
            'is_active': True,
        }
    )
    
    # Get or create a place for the place admin (use the place_manager as owner)
    place, place_created = Place.objects.get_or_create(
        name='مطعم تجريبي',
        defaults={
            'description': 'مطعم تجريبي لمدير المكان',
            'address': 'بغداد، العراق',
            'latitude': 33.3152,
            'longitude': 44.3661,
            'phone': '+9647700000000',
            'email': 'test@restaurant.iq',
            'category': category,
            'governorate': governorate,
            'owner': user,  # Place admin is the owner
            'price_range': '$$',
            'is_open': True,
            'has_booking': True,
        }
    )
    
    if place_created:
        print(f"   ✅ تم إنشاء مكان تجريبي: {place.name}")
    else:
        print(f"   ℹ️  استخدام مكان موجود: {place.name}")
    
    # Create PlaceAdmin link
    place_admin, admin_created = PlaceAdmin.objects.get_or_create(
        user=user,
        place=place,
        defaults={
            'can_manage_bookings': True,
            'can_manage_reviews': True,
            'can_manage_offers': True,
            'can_manage_place_info': True,
        }
    )
    
    if admin_created:
        print(f"   ✅ تم ربط مدير المكان بالمكان")
    else:
        print(f"   ℹ️  مدير المكان مربوط بالفعل بالمكان")
    
    return user, place

if __name__ == '__main__':
    print("=" * 60)
    print("إنشاء حسابات المديرين")
    print("=" * 60)
    
    # Create Project Manager
    project_manager = create_project_manager()
    
    # Create Place Manager
    place_manager, place = create_place_manager()
    
    print("\n" + "=" * 60)
    print("✅ تم إنشاء جميع الحسابات بنجاح!")
    print("=" * 60)
    print("\n📋 ملخص الحسابات:")
    print(f"\n1. مدير المشروع (Super Admin):")
    print(f"   Username: project_manager")
    print(f"   Password: ProjectManager2024!")
    print(f"   يمكنه الوصول إلى: Django Admin Panel")
    
    print(f"\n2. مدير المكان (Place Admin):")
    print(f"   Username: place_manager")
    print(f"   Password: PlaceManager2024!")
    print(f"   المكان: {place.name}")
    print(f"   يمكنه الوصول إلى: Place Admin Dashboard")
    print("\n" + "=" * 60)

