"""Sync settings page.""" from datetime import datetime, timezone from fastapi import APIRouter, Depends, Request from fastapi.responses import RedirectResponse from sqlalchemy.orm import Session from web.auth.session import get_current_user from web.config import settings from web.database import get_db from web.models.connections import SyncConfig from web.templates_env import templates router = APIRouter() def _render(request: Request, ctx: dict): ctx["request"] = request ctx.setdefault("jivosite_widget_id", settings.JIVOSITE_WIDGET_ID) return templates.TemplateResponse(ctx.pop("request"), "sync.html", ctx) def _now(): return datetime.now(timezone.utc).replace(tzinfo=None) @router.get("/sync") async def sync_get(request: Request, db: Session = Depends(get_db)): try: user = get_current_user(request, db) except Exception: return RedirectResponse("/login", 303) config = db.query(SyncConfig).filter_by(user_id=user.id).first() return _render(request, { "user": user, "config": config, "saved": request.query_params.get("saved"), }) @router.post("/sync/settings") async def sync_settings_post(request: Request, db: Session = Depends(get_db)): try: user = get_current_user(request, db) except Exception: return RedirectResponse("/login", 303) form = await request.form() raw_multiplier = str(form.get("price_multiplier", "1")).strip() try: multiplier = float(raw_multiplier) if multiplier <= 0: raise ValueError except ValueError: multiplier = 1.0 config = db.query(SyncConfig).filter_by(user_id=user.id).first() if config: config.price_multiplier = multiplier else: config = SyncConfig( user_id=user.id, is_enabled=False, price_multiplier=multiplier, ) db.add(config) db.commit() return RedirectResponse("/sync?saved=1", 303)