# app/helpers.py

from flask import url_for
from flask_login import current_user


def get_dashboard_url(user):
    """
    دریافت URL داشبورد بر اساس نقش کاربر
    
    Args:
        user: شیء کاربر (User model)
    
    Returns:
        str: نام endpoint برای هدایت یا None در صورت عدم وجود
    """
    role_dashboards = {
        'admin': 'admin.index',
        'manager': 'manager.index',
        'employer': 'employer.index',
        'employee': 'employee.index'
    }
    
    return role_dashboards.get(user.role)


def get_dashboard_url_by_role(role):
    """
    دریافت URL داشبورد بر اساس نقش (برای استفاده در جاهایی که کاربر نداریم)
    
    Args:
        role: نام نقش (string)
    
    Returns:
        str: نام endpoint برای هدایت یا None در صورت عدم وجود
    """
    role_dashboards = {
        'admin': 'admin.advertisements',
        'manager': 'manager.index',
        'employer': 'employer.index',
        'employee': 'employee.index'
    }
    
    return role_dashboards.get(role)


def get_role_persian(role):
    """
    دریافت نام فارسی نقش
    
    Args:
        role: نام نقش (string)
    
    Returns:
        str: نام فارسی نقش
    """
    roles = {
        'admin': 'ادمین',
        'manager': 'مدیر پروژه',
        'employer': 'کارفرما',
        'employee': 'عامل اجرایی'
    }
    return roles.get(role, role)


def is_user_allowed_to_access(user, required_role):
    """
    بررسی اینکه آیا کاربر اجازه دسترسی به یک بخش را دارد
    
    Args:
        user: شیء کاربر
        required_role: نقش مورد نیاز (string یا list)
    
    Returns:
        bool: True اگر کاربر اجازه دارد
    """
    if isinstance(required_role, str):
        required_role = [required_role]
    
    return user.is_authenticated and user.role in required_role


def redirect_to_dashboard(user):
    """
    هدایت کاربر به داشبورد مناسب بر اساس نقش
    
    Args:
        user: شیء کاربر
    
    Returns:
        Response: شیء redirect Flask
    """
    from flask import redirect, url_for, flash
    
    dashboard_url = get_dashboard_url(user)
    
    if dashboard_url:
        try:
            return redirect(url_for(dashboard_url))
        except Exception as e:
            flash(f'خطا در هدایت به داشبورد: {str(e)}', 'danger')
            return redirect(url_for('auth.login'))
    else:
        flash('نقش کاربری شما مشخص نیست.', 'danger')
        return redirect(url_for('auth.login'))