import { apiRequest } from "@/shared/api/request";
import { API_ENDPOINTS, API_OPERATIONS, apiEndpointPath } from "@/shared/api/generated/endpoints";
import type { ChangePasswordPayload, LoginPayload, SessionDto } from "@/shared/api/types";

export function login(payload: LoginPayload): Promise<SessionDto> {
  const endpoint = API_ENDPOINTS.login;
  return apiRequest<SessionDto, LoginPayload>(apiEndpointPath(API_OPERATIONS.login), {
    body: payload,
    method: endpoint.method,
    skipAuth: true
  });
}

export function logout(): Promise<unknown> {
  const endpoint = API_ENDPOINTS.logout;
  return apiRequest(apiEndpointPath(API_OPERATIONS.logout), { method: endpoint.method, skipAuth: true });
}

export function refreshSession(): Promise<SessionDto> {
  const endpoint = API_ENDPOINTS.refresh;
  return apiRequest<SessionDto>(apiEndpointPath(API_OPERATIONS.refresh), {
    method: endpoint.method,
    skipAuth: true
  });
}

export function getMe(): Promise<SessionDto> {
  return apiRequest<SessionDto>(apiEndpointPath(API_OPERATIONS.me));
}

export function changePassword(payload: ChangePasswordPayload): Promise<unknown> {
  const endpoint = API_ENDPOINTS.changePassword;
  return apiRequest<unknown, ChangePasswordPayload>(apiEndpointPath(API_OPERATIONS.changePassword), {
    body: payload,
    method: endpoint.method
  });
}
