import asyncio
from sqlalchemy import text
from app.database import engine, Base
from app.models import Tenant, User, Device, DeviceReading, AlertRule, AlertLog
from app.core.security import get_password_hash

async def init_database():
    print('🔧 Initializing database...')
    
    try:
        # إنشاء قاعدة البيانات إذا لم تكن موجودة
        async with engine.begin() as conn:
            await conn.execute(text('CREATE DATABASE IF NOT EXISTS smartlife_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'))
            print('✅ Database created/verified')
            
            await conn.execute(text('USE smartlife_db'))
            
        # إنشاء جميع الجداول
        print('📋 Creating tables...')
        async with engine.begin() as conn:
            await conn.run_sync(Base.metadata.create_all)
        
        print('✅ All tables created successfully!')
        
        # التحقق من وجود مستخدم Admin
        from app.database import AsyncSessionLocal
        async with AsyncSessionLocal() as session:
            from sqlalchemy import select
            result = await session.execute(select(User).where(User.role == 'super_admin'))
            admin = result.scalar_one_or_none()
            
            if not admin:
                print('👤 Creating default admin user...')
                admin = User(
                    email='admin@smartlife.local',
                    password_hash=get_password_hash('admin123'),
                    full_name='System Administrator',
                    full_name_ar='مدير النظام',
                    role='super_admin',
                    language='ar',
                    timezone='Asia/Riyadh',
                    is_active=True
                )
                session.add(admin)
                await session.commit()
                print('✅ Admin user created!')
            else:
                print('✅ Admin user already exists')
        
        # عرض الجداول
        async with engine.begin() as conn:
            result = await conn.execute(text('SHOW TABLES'))
            tables = result.fetchall()
            print(f'\n📊 Database contains {len(tables)} tables:')
            for table in tables:
                print(f'  ✓ {table[0]}')
        
        print('\n' + '='*60)
        print('🎉 Database initialized successfully!')
        print('='*60)
        print('Login credentials:')
        print('  📧 Email: admin@smartlife.local')
        print('  🔑 Password: admin123')
        print('='*60)
        print('\n✅ You can now login at: http://localhost:3000')
        
    except Exception as e:
        print(f'❌ Error: {e}')
        import traceback
        traceback.print_exc()

if __name__ == '__main__':
    asyncio.run(init_database())
