"""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, get_viewed_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) @router.get("/sync") async def sync_get(request: Request, db: Session = Depends(get_db)): try: real_user, viewed_user = get_viewed_user(request, db) except Exception: return RedirectResponse("/login", 303) config = db.query(SyncConfig).filter_by(user_id=viewed_user.id).first() return _render(request, { "user": real_user, "viewed_user": viewed_user if viewed_user.id != real_user.id else None, "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() evo_mirror_enabled = form.get("evo_mirror_enabled") == "1" vk_mirror_enabled = form.get("vk_mirror_enabled") == "1" sync_enabled = form.get("is_enabled") == "1" 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.evo_mirror_enabled = evo_mirror_enabled config.vk_mirror_enabled = vk_mirror_enabled config.is_enabled = sync_enabled config.price_multiplier = multiplier else: config = SyncConfig( user_id=user.id, evo_mirror_enabled=evo_mirror_enabled, vk_mirror_enabled=vk_mirror_enabled, is_enabled=sync_enabled, price_multiplier=multiplier, ) db.add(config) db.commit() return RedirectResponse("/sync?saved=1", 303)