"""Seat-limit helpers for tier-based team size enforcement."""
from __future__ import annotations

from app.models import Company, UserCompany

# Tier → maximum allowed team members (seats)
TIER_SEAT_LIMITS: dict[str, int] = {
    'launch':  5,
    'growth': 25,
    'command': 100,
    'starter': 2,
}


def get_company_seat_usage(company_id: str | int) -> dict:
    """Return seat usage info for a company.

    Returns
    -------
    {
        'used':   int,   # current member count
        'limit':  int,   # max seats for current tier
        'tier':   str,   # current tier slug
        'company_name': str,
    }
    """
    company = Company.query.get(company_id)
    if not company:
        return {'used': 0, 'limit': 2, 'tier': 'starter', 'company_name': 'Unknown'}

    tier = (company.settings_json or {}).get('tier', 'starter')
    limit = TIER_SEAT_LIMITS.get(tier, 2)  # default to 2 for unknown tiers
    used = UserCompany.query.filter_by(company_id=company_id).count()

    return {
        'used': used,
        'limit': limit,
        'tier': tier,
        'company_name': company.name,
    }


def check_seat_limit(company_id: str | int) -> tuple:
    """Check whether a company can add another seat.

    Returns
    -------
    (error_response, seat_info) tuple.
    If within limit, error_response is None.
    If over, returns (jsonify(...), 400), None.
    """
    from flask import jsonify

    usage = get_company_seat_usage(company_id)
    if usage['used'] >= usage['limit']:
        return (jsonify({
            'error': f'Company has reached its seat limit of {usage["limit"]}. Upgrade to add more seats.',
            'errorCode': 'SEAT_LIMIT_EXCEEDED',
            'seatUsage': usage,
        }), 400), None

    return None, usage