from apps.companies.repositories import CompanyUserRepository
from apps.permissions.models import Role


class CompanyUserService:

    @staticmethod
    def _resolve_roles(company, role_param):
        """
        Resolves role_param into a list of role names for THIS company.

        Supports:
        - '1,2'
        - 'Service Advisor'
        - '1,Service Advisor'
        """
        if not role_param:
            return None

        role_list = Role.objects.filter(company=company, is_active=True)
        role_map = {}
        for role in role_list:
            key = role.name.lower().replace(' ', '_')
            role_map[str(role.id)] = role.name          # id -> label
            role_map[key] = role.name                  # key -> label
            role_map[role.name.lower()] = role.name   # label -> label

        resolved_roles = set()
        for raw in role_param.split(','):
            raw = raw.strip().lower().replace(' ', '_')
            if raw in role_map:
                resolved_roles.add(role_map[raw])

        return list(resolved_roles) or None

    @staticmethod
    def list_company_users(user, role_param=None):
        company = getattr(user, 'active_company', None)
        if not company:
            return CompanyUserRepository.company_users_queryset(None).none()

        role_names = CompanyUserService._resolve_roles(company, role_param)

        return CompanyUserRepository.company_users_queryset(
            company=company,
            role_names=role_names
        )
