from fastapi import APIRouter, Depends, Header
from sqlalchemy import select
from app.core.database import get_db
from app.core.dependencies import require_permission
from app.models.reward import Reward
from app.schemas.reward import RewardCreate, RedemptionRequest
from app.services.reward_service import RewardService
router=APIRouter(prefix="/rewards",tags=["Rewards"])

@router.post("")
async def create(data:RewardCreate,user=Depends(require_permission("rewards.manage")),db=Depends(get_db)):
    r=Reward(brand_id=user.brand_id,**data.model_dump()); db.add(r); await db.commit(); await db.refresh(r)
    return {"success":True,"message":"Reward created","data":{"id":r.id,"name":r.name}}
@router.get("")
async def list_rewards(user=Depends(require_permission("rewards.view")),db=Depends(get_db)):
    rows=(await db.scalars(select(Reward).where(Reward.brand_id==user.brand_id).order_by(Reward.id.desc()))).all()
    return {"success":True,"message":"Rewards","data":[{"id":r.id,"name":r.name,"reward_type":r.reward_type,"points_cost":r.points_cost,"stock":r.stock,"status":r.status} for r in rows]}
@router.post("/{reward_id}/redeem")
async def redeem(reward_id:int,data:RedemptionRequest,user=Depends(require_permission("rewards.redeem")),db=Depends(get_db)):
    r=await RewardService.redeem(db,user.brand_id,user.id,reward_id,data.idempotency_key)
    return {"success":True,"message":"Reward redeemed","data":{"id":r.id,"points_spent":r.points_spent}}
