from fastapi import APIRouter
from .routes import ping
from .routes import users
from .routes import annotations
from .routes import auth
from .routes import projects
from .routes import project
from .routes import imports
from .routes import events
from .routes import highlight
from .routes import stats
from .routes import export
from .routes import search
from .routes import evaluation
from .routes import mailing

# this router proxies all /api endpoints
router = APIRouter()

# route for testing / checking the service is reachable
router.include_router(ping.router, prefix='/ping')

# route to fetch, manage, submit item annotations
router.include_router(annotations.router, prefix='/annotations', tags=['annotations'])

# route for all user-related endpoints (everything not related to authentication)
router.include_router(users.router, prefix='/users', tags=['users'])

# route for authentication
router.include_router(auth.router, prefix='/login', tags=['oauth'])

# route for general project things (aka non-project-specific)
router.include_router(projects.router, prefix='/projects', tags=['projects'])

# route for project related things
router.include_router(project.router, prefix='/project', tags=['project'])

# route for project related things
router.include_router(imports.router, prefix='/imports', tags=['imports'])

# route for triggering events in the system
router.include_router(events.router, prefix='/events', tags=['events'])

# route for listing and editing highlighters
router.include_router(highlight.router, prefix='/highlighters', tags=['highlighters'])

# route for retrieving project statistics
router.include_router(stats.router, prefix='/stats', tags=['stats'])

# route for downloading data
router.include_router(export.router, prefix='/export', tags=['export'])

# route for searching data (e.g. in openalex)
router.include_router(search.router, prefix='/search', tags=['search'])

# route for computing evaluation metrics and other statistics
router.include_router(evaluation.router, prefix='/eval', tags=['evaluation'])

# route for sending emails
router.include_router(mailing.router, prefix='/mail', tags=['mailing'])