"""
مهام الأجهزة - Celery Tasks
"""
import asyncio
from datetime import datetime
from app.celery_app import celery_app


@celery_app.task(bind=True, max_retries=3)
def sync_all_devices(self):
    """مزامنة جميع الأجهزة من LifeSmart"""
    try:
        from app.database import async_session_maker
        from app.models.tenant import Tenant
        from app.services.lifesmart_client import LifeSmartClient
        from sqlalchemy import select
        
        async def _sync():
            async with async_session_maker() as session:
                # جلب جميع المستأجرين النشطين
                result = await session.execute(
                    select(Tenant).where(Tenant.is_active == True)
                )
                tenants = result.scalars().all()
                
                synced_count = 0
                for tenant in tenants:
                    if tenant.lifesmart_app_key and tenant.lifesmart_user_token:
                        try:
                            client = LifeSmartClient(
                                app_key=tenant.lifesmart_app_key,
                                app_token=tenant.lifesmart_app_token,
                                region=tenant.lifesmart_region or "global"
                            )
                            # مزامنة الأجهزة
                            # await client.sync_devices(session, tenant.id)
                            synced_count += 1
                        except Exception as e:
                            print(f"Failed to sync tenant {tenant.id}: {e}")
                
                return synced_count
        
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        result = loop.run_until_complete(_sync())
        loop.close()
        
        return {"status": "success", "synced_tenants": result, "timestamp": datetime.now().isoformat()}
        
    except Exception as e:
        self.retry(exc=e, countdown=60)


@celery_app.task
def sync_tenant_devices(tenant_id: str):
    """مزامنة أجهزة مستأجر محدد"""
    try:
        # تنفيذ المزامنة
        return {"status": "success", "tenant_id": tenant_id, "timestamp": datetime.now().isoformat()}
    except Exception as e:
        return {"status": "error", "error": str(e)}


@celery_app.task
def update_device_status(device_id: str, status: dict):
    """تحديث حالة جهاز"""
    try:
        return {"status": "success", "device_id": device_id}
    except Exception as e:
        return {"status": "error", "error": str(e)}
