from db.models.user import User
from db.models.role import Role
from core.security import get_password_hash
from sqlalchemy.orm import Session
from datetime import datetime

from db.models.section import Section
from db.models.permission import Permission

DEFAULT_USERS = [
    {
        "name": "Admin User",
        "email": "admin@syllabuild.com",
        "password": "admin123",
        "roles": ["admin"]
    },
    {
        "name": "Teacher User",
        "email": "teacher@syllabuild.com",
        "password": "teacher123",
        "roles": ["teacher"]
    }
]
DEFAULT_SECTIONS = [
    {
        "id": 1,
        "name": "Dashboard",
        "key": "dashboard"
    },
    {
      "id": 2,
      "name": "Role Management",
      "key": "role_management"
    },
    {
        "id": 3,
        "name": "User Management",
        "key": "user_management"
    },
    {
        "id": 4,
        "name": "University",
        "key": "university"
    }
    ,{
        "id": 5,
        "name": "Courses",
        "key": "courses" 
    }
]
DEFAULT_PERMISSIONS = [
    {
        "role_id": 1,
        "section_id": 1,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 1,
        "section_id": 2,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 1,
        "section_id": 3,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 1,
        "section_id": 4,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 1,
        "section_id": 5,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    
    {
        "role_id": 2,
        "section_id": 1,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 2,
        "section_id": 2,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 2,
        "section_id": 3,
        "view": True,
        "create": True,
        "edit": True,
        "delete": True
    },
    {
        "role_id": 2,
        "section_id": 4,
        "view": True,
        "create": True,
        "edit": True, 
        "delete": True  
    }
]
def seed_users(db: Session):
    for user_data in DEFAULT_USERS:
        existing_user = db.query(User).filter_by(email=user_data["email"]).first()
        if existing_user:
            continue
        hashed_password = get_password_hash(user_data["password"])
        user = User(
            name=user_data["name"],
            email=user_data["email"],
            password_hash=hashed_password,
            is_active=True
        )
        # Assign roles
        user_roles = db.query(Role).filter(Role.name.in_(user_data["roles"])).all()
        user.role_id = user_roles[0].id if user_roles else None
        user.roles = user_roles
        user.activation_date = datetime.utcnow()
        user.last_login = datetime.utcnow()
        user.is_email_verified = True
        user.is_phone_verified = True
        user.phone_number = "1234567890"
        user.profile_picture = "default_profile_picture.png"
        user.created_at = datetime.utcnow()
        user.updated_at = datetime.utcnow()
        db.add(user)
    db.commit()
    for section_data in DEFAULT_SECTIONS:
        existing_user = db.query(Section).filter_by(key=section_data["key"]).first()
        if existing_user:
            continue
        section = Section(
            id=section_data["id"],
            name=section_data["name"],
            key=section_data["key"],
        )
        # ADD Section
      
        db.add(section)
    db.commit()
    for permission_data in DEFAULT_PERMISSIONS:
        existing_permission = db.query(Permission).filter_by( role_id=permission_data["role_id"],
            section_id=permission_data["section_id"]).first()
        if existing_permission:
            continue
        permission = Permission(
            role_id=permission_data["role_id"],
            section_id=permission_data["section_id"],
            view=permission_data["view"],
            create=permission_data["create"],
            edit=permission_data["edit"],
            delete=permission_data["delete"]
        )
        # ADD Permission
      
        db.add(permission)
    db.commit()

def run_seeds(db: Session):
    seed_users(db)