from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from app.core.config import settings
import logging
import os

logger = logging.getLogger(__name__)

# استفاده از pymysql برای MySQL
DATABASE_URL = settings.DATABASE_URL.replace("mysql://", "mysql+pymysql://")

engine = create_engine(
    DATABASE_URL,
    pool_size=20,
    max_overflow=30,
    pool_pre_ping=True,
    pool_recycle=3600,
    echo=settings.DEBUG
)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()


def init_db():
    """
    ایجاد جداول در پایگاه داده MySQL
    """
    try:
        Base.metadata.create_all(bind=engine)
        logger.info("✅ جداول پایگاه داده MySQL ایجاد شدند")
        
        # ایجاد کاربر ادمین اولیه
        from app.crud import user_crud
        from app.schemas import UserCreate
        from app.core.deps import get_db
        
        db_gen = get_db()
        db = next(db_gen)
        
        try:
            admin_user = user_crud.get_by_email(db, email="admin@zpir.ir")
            if not admin_user:
                user_crud.create(
                    db,
                    obj_in=UserCreate(
                        username="admin",
                        email="admin@zpir.ir",
                        password="Admin@Zp1r!r",
                        full_name="مدیر سیستم",
                        is_superuser=True,
                        is_verified=True
                    )
                )
                logger.info("✅ کاربر ادمین ایجاد شد (admin@zpir.ir)")
        except Exception as e:
            logger.warning(f"⚠️ خطا در ایجاد کاربر ادمین: {e}")
        finally:
            db.close()
            try:
                next(db_gen)
            except StopIteration:
                pass
                
    except Exception as e:
        logger.error(f"❌ خطا در ایجاد پایگاه داده: {e}")
        raise
