# retoor <retoor@molodetz.nl>

import asyncio
import base64
import binascii
import hashlib
import html
import json
import logging
import re
import secrets
from datetime import datetime, timedelta, timezone
from decimal import Decimal
from typing import Optional
from urllib.parse import urlsplit
from passlib.hash import pbkdf2_sha256
from fastapi import Request, HTTPException, status

from devplacepy.cache import TTLCache
from devplacepy.database import (
    get_table,
    get_user_stars,
    bump_cache_version,
    sync_local_cache,
    invalidate_admins_cache,
    notification_enabled,
    get_silenced_uids,
    record_activity,
    record_unique_activity,
)
from devplacepy.config import (
    SESSION_MAX_AGE,
    DEFAULT_CORRECTION_PROMPT,
    DEFAULT_MODIFIER_PROMPT,
)
from devplacepy.services.background import background

from devplacepy.utils.passwords import (
    hash_password,
    verify_password,
    hash_password_async,
    verify_password_async,
    create_session,
)
from devplacepy.utils.authcache import (
    _user_cache,
    _sync_auth_cache,
    clear_user_cache,
    clear_session_cache,
)
from devplacepy.utils.auth import (
    _UNSET,
    _user_from_session,
    _user_from_api_key,
    _user_from_basic,
    _request_has_auth,
    _resolve_user,
    _user_from_devrant_token,
    _user_from_access_token,
    get_current_user,
)
from devplacepy.utils.guards import (
    safe_next,
    redirect_back,
    cookie_secure,
    client_ip,
    require_user,
    is_admin,
    is_primary_admin,
    require_admin,
    not_found,
    require_user_api,
)
from devplacepy.utils.text import (
    strip_html,
    _FLOAT_TOKEN,
    plain_float,
    _mark_floats,
    pretty_json,
    slugify,
    generate_uid,
    make_combined_slug,
    time_ago,
    extract_mentions,
    format_date,
)
from devplacepy.utils.notifications import (
    logger,
    PUSH_ICON,
    DEFAULT_PUSH_URL,
    _push_tasks,
    _safe_notify,
    _schedule_push,
    _schedule_telegram,
    create_notification,
    _deliver_notification,
    create_thread_notifications,
    _deliver_thread_notifications,
    create_mention_notifications,
    _deliver_mention_notifications,
)
from devplacepy.utils.badges import (
    LEVEL_BADGES,
    BADGE_CATALOG,
    BADGE_GROUPS,
    get_badge,
    build_achievements,
    award_badge,
    notify_badge,
)
from devplacepy.utils.rewards import (
    LEVEL_XP,
    XP_POST,
    XP_COMMENT,
    XP_PROJECT,
    XP_GIST,
    XP_UPVOTE,
    XP_FOLLOW,
    XP_QUIZ,
    XP_QUIZ_PUBLISH,
    XP_QUIZ_COMPLETE,
    XP_BATTLE_PART,
    XP_BATTLE_WIN,
    XP_BATTLE_TOP,
    level_for_xp,
    award_xp,
    _COUNT_MILESTONES,
    _milestone_metrics,
    check_milestone_badges,
    award_rewards,
    _apply_rewards,
    ACHIEVEMENTS,
    UNIQUE_ACTIONS,
    track_action,
    _apply_achievements,
)
from devplacepy.utils.accounts import (
    _create_account,
    register_account,
    register_account_async,
)
