import { serviceFactory } from "../config/service-factory";
import { ApiKey, ApiResponse, systemApiKeyRequestModel } from "../models/models";
import { printMessage } from "../utils/printMessage.util";

export const systemApiKeyService = {
  getBySystemApiKey: async (apyKey: string): Promise<ApiKey> => {
    const response = await serviceFactory
      .getSystemApiKeyServiceAxios()
      .get(`/byKey/${apyKey}`);
    return response.data;
  },
  generateSystemApiKey: async (requestModel: systemApiKeyRequestModel): Promise<ApiResponse> => {
    try {
      const response = await serviceFactory.getSystemApiKeyServiceAxios().post('', requestModel);
      if (response.status >= 200 && response.status < 300) {
        const apiResponse: ApiResponse = response.data;
        if (!apiResponse.isSuccess) {
          throw new Error(`Authentication failed: ${apiResponse.message || 'Invalid credentials'}`);
        }
        return apiResponse;
      } else {
        throw new Error(`HTTP Error: ${response.status} - ${response.statusText}`);
      }
    } catch (error: any) {
      if (error.response) {
        const errorMessage = error.response.data?.message || error.response.data?.error || error.response.statusText;
        throw new Error(`Authentication failed: ${errorMessage}`);
      } else if (error.request) {
        throw new Error("Authentication failed: No response from server");
      } else {
        if (error instanceof Error) {
          throw error;
        }
        throw new Error("User authentication failed.");
      }
    }
  }
};