# retoor <retoor@molodetz.nl>

from __future__ import annotations

from ..spec import Action
from ._shared import body, path


AUTH_ACTIONS: tuple[Action, ...] = (
    Action(
        name="auth_status",
        method="GET",
        path="",
        summary="Report whether the current session is authenticated",
        handler="status",
        requires_auth=False,
    ),
    Action(
        name="login",
        method="POST",
        path="/auth/login",
        summary="Authenticate with email and password and start a session",
        handler="login",
        requires_auth=False,
        params=(
            body("email", "Account email address.", required=True),
            body("password", "Account password.", required=True),
            body("remember_me", "Keep the session alive longer ('on' or '')."),
        ),
    ),
    Action(
        name="logout",
        method="GET",
        path="/auth/logout",
        summary="End the current session",
        handler="logout",
        requires_auth=True,
    ),
    Action(
        name="signup",
        method="POST",
        path="/auth/signup",
        summary="Create a new account",
        requires_auth=False,
        params=(
            body("username", "Desired username.", required=True),
            body("email", "Email address.", required=True),
            body("password", "Password (minimum six characters).", required=True),
            body("confirm_password", "Password confirmation.", required=True),
        ),
    ),
    Action(
        name="forgot_password",
        method="POST",
        path="/auth/forgot-password",
        summary="Request a password reset email",
        requires_auth=False,
        params=(body("email", "Account email address.", required=True),),
    ),
    Action(
        name="reset_password",
        method="POST",
        path="/auth/reset-password/{token}",
        summary="Reset a password using a reset token",
        requires_auth=False,
        params=(
            path("token", "Reset token from the email link."),
            body("password", "New password.", required=True),
            body("confirm_password", "New password confirmation.", required=True),
        ),
    ),
)
