# app/modules/loyalty/services/loyalty_onboarding_service.py
"""
Onboarding provider for the loyalty module.

Provides the "Create your first loyalty program" step.
Completed when at least 1 LoyaltyProgram exists for the store's merchant.
"""

import logging

from sqlalchemy.orm import Session

from app.modules.contracts.onboarding import OnboardingStepDefinition

logger = logging.getLogger(__name__)


class LoyaltyOnboardingProvider:
    """Onboarding provider for loyalty module."""

    @property
    def onboarding_category(self) -> str:
        return "loyalty"

    def get_onboarding_steps(self) -> list[OnboardingStepDefinition]:
        return [
            OnboardingStepDefinition(
                key="loyalty.create_program",
                title_key="loyalty.onboarding.create_program.title",
                description_key="loyalty.onboarding.create_program.description",
                icon="gift",
                route_template="/store/{store_code}/loyalty/settings",
                order=300,
                category="loyalty",
            ),
        ]

    def is_step_completed(
        self, db: Session, store_id: int, step_key: str
    ) -> bool:
        if step_key != "loyalty.create_program":
            return False

        from app.modules.loyalty.models.loyalty_program import LoyaltyProgram
        from app.modules.tenancy.models.store import Store

        # Programs belong to merchant, not store — join through store
        store = db.query(Store).filter(Store.id == store_id).first()
        if not store:
            return False

        exists = (
            db.query(LoyaltyProgram)
            .filter(LoyaltyProgram.merchant_id == store.merchant_id)
            .first()
            is not None
        )
        return exists


loyalty_onboarding_provider = LoyaltyOnboardingProvider()
