from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.loyalty_program import LoyaltyProgram
from app.models.tier import Tier

class LoyaltyService:
    @staticmethod
    async def calculate_points(db: AsyncSession, brand_id: int, amount: float, tier_id=None) -> int:
        program = await db.scalar(select(LoyaltyProgram).where(
            LoyaltyProgram.brand_id == brand_id, LoyaltyProgram.status == "active"
        ))
        base = int((amount / 100) * float(program.points_per_100)) if program else int(amount / 100 * 10)
        multiplier = 1.0
        if tier_id:
            tier = await db.scalar(select(Tier).where(Tier.id == tier_id, Tier.brand_id == brand_id))
            if tier:
                multiplier = float(tier.multiplier)
        return int(base * multiplier)
