#!/usr/bin/env python
"""
سكريبت لربط مكان بمدير المكان
"""
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, PlaceAdmin
from places.models import Place, Category, Governorate


def link_place_to_manager(place_id=None, manager_username='place_manager'):
    """
    ربط مكان بمدير المكان
    
    Args:
        place_id: ID المكان (إذا لم يتم تحديده، سيتم استخدام أول مكان)
        manager_username: اسم المستخدم لمدير المكان (افتراضي: place_manager)
    """
    try:
        # الحصول على مدير المكان
        manager = User.objects.get(username=manager_username)
        
        if manager.role != 'place_admin':
            print(f"⚠️  المستخدم {manager_username} ليس مدير مكان!")
            return False
        
        # الحصول على المكان
        if place_id:
            place = Place.objects.get(id=place_id)
        else:
            # استخدام أول مكان موجود
            place = Place.objects.first()
            if not place:
                print("⚠️  لا توجد أماكن في النظام!")
                return False
        
        print(f"\n{'='*60}")
        print("ربط مكان بمدير المكان")
        print(f"{'='*60}")
        print(f"\nمدير المكان: {manager.username} (ID: {manager.id})")
        print(f"المكان: {place.name} (ID: {place.id})")
        
        # إنشاء أو تحديث PlaceAdmin
        place_admin, created = PlaceAdmin.objects.get_or_create(
            user=manager,
            place=place,
            defaults={
                'can_manage_bookings': True,
                'can_manage_reviews': True,
                'can_manage_offers': True,
                'can_manage_place_info': True,
            }
        )
        
        if created:
            print(f"\n✅ تم ربط المكان بمدير المكان بنجاح!")
        else:
            print(f"\nℹ️  المكان مربوط بالفعل بمدير المكان")
            # تحديث الصلاحيات
            place_admin.can_manage_bookings = True
            place_admin.can_manage_reviews = True
            place_admin.can_manage_offers = True
            place_admin.can_manage_place_info = True
            place_admin.save()
            print(f"✅ تم تحديث الصلاحيات")
        
        print(f"\n📋 تفاصيل الربط:")
        print(f"   المكان: {place_admin.place.name}")
        print(f"   يمكن إدارة الحجوزات: {place_admin.can_manage_bookings}")
        print(f"   يمكن إدارة التقييمات: {place_admin.can_manage_reviews}")
        print(f"   يمكن إدارة العروض: {place_admin.can_manage_offers}")
        print(f"   يمكن إدارة معلومات المكان: {place_admin.can_manage_place_info}")
        print(f"\n{'='*60}")
        
        return True
        
    except User.DoesNotExist:
        print(f"❌ لم يتم العثور على المستخدم: {manager_username}")
        return False
    except Place.DoesNotExist:
        print(f"❌ لم يتم العثور على المكان: {place_id}")
        return False
    except Exception as e:
        print(f"❌ خطأ: {str(e)}")
        import traceback
        traceback.print_exc()
        return False


def list_all_places():
    """عرض جميع الأماكن"""
    places = Place.objects.all()
    
    print(f"\n{'='*60}")
    print(f"جميع الأماكن ({places.count()})")
    print(f"{'='*60}")
    
    for place in places:
        print(f"\n📍 {place.name} (ID: {place.id})")
        print(f"   العنوان: {place.address}")
        print(f"   الفئة: {place.category.name_ar if place.category else 'لا يوجد'}")
        print(f"   المحافظة: {place.governorate.name_ar if place.governorate else 'لا يوجد'}")
        print(f"   المالك: {place.owner.username if place.owner else 'لا يوجد'}")
        
        # التحقق من PlaceAdmin
        admins = PlaceAdmin.objects.filter(place=place)
        if admins.exists():
            print(f"   ✅ مرتبط بـ {admins.count()} مدير(ين):")
            for admin in admins:
                print(f"      - {admin.user.username}")
        else:
            print(f"   ⚠️  غير مرتبط بأي مدير")


if __name__ == '__main__':
    import argparse
    
    parser = argparse.ArgumentParser(description='ربط مكان بمدير المكان')
    parser.add_argument('--place-id', type=int, help='ID المكان')
    parser.add_argument('--manager', type=str, default='place_manager', help='اسم المستخدم لمدير المكان')
    parser.add_argument('--list', action='store_true', help='عرض جميع الأماكن')
    
    args = parser.parse_args()
    
    if args.list:
        list_all_places()
    else:
        link_place_to_manager(place_id=args.place_id, manager_username=args.manager)

