import axios from "axios";

import { buildCommanderHeaders, resolveCommanderBaseUrl } from "./commanderHttp";

export type ConfiguracaoPublica = {
  id: string;
  asanaWorkspaceId: string | null;
  asanaWorkspaceNome: string | null;
  asanaToken: string | null;
  asanaTokenConfigured: boolean;
  atualizadoEm: string;
  atualizadoPorId: string | null;
};

type GetConfiguracoesResponse = {
  data: ConfiguracaoPublica | null;
};

type SalvarConfiguracoesBody = {
  asanaToken?: string;
  asanaWorkspaceId?: string | null;
  asanaWorkspaceNome?: string | null;
};

type SalvarConfiguracoesResponse = {
  data: ConfiguracaoPublica;
};

class FechamentoConfiguracoesService {
  async getConfiguracoes(): Promise<ConfiguracaoPublica | null> {
    try {
      const headers = await buildCommanderHeaders();
      const baseUrl = resolveCommanderBaseUrl();
      const response = await axios.get<GetConfiguracoesResponse>(`${baseUrl}/configuracoes`, {
        headers,
      });
      return response.data.data;
    } catch (error: unknown) {
      if (axios.isAxiosError(error)) {
        if (!error.response) {
          throw new Error(
            "Não foi possível conectar na API do Commander. Verifique VITE_API_BASE_URL_COMMANDER e se o backend está acessível.",
          );
        }
        const message =
          ((error.response.data as { error?: { message?: string } } | undefined)?.error?.message ??
            error.message) ||
          "Erro ao carregar configurações.";
        throw new Error(message);
      }
      throw new Error("Erro ao carregar configurações.");
    }
  }

  async salvarConfiguracoes(body: SalvarConfiguracoesBody): Promise<ConfiguracaoPublica> {
    try {
      const headers = await buildCommanderHeaders();
      const baseUrl = resolveCommanderBaseUrl();
      const response = await axios.post<SalvarConfiguracoesResponse>(
        `${baseUrl}/configuracoes`,
        body,
        { headers },
      );
      return response.data.data;
    } catch (error: unknown) {
      if (axios.isAxiosError(error)) {
        if (!error.response) {
          throw new Error(
            "Não foi possível conectar na API do Commander. Verifique VITE_API_BASE_URL_COMMANDER e se o backend está acessível.",
          );
        }
        const message =
          ((error.response.data as { error?: { message?: string } } | undefined)?.error?.message ??
            error.message) ||
          "Erro ao salvar configurações.";
        throw new Error(message);
      }
      throw new Error("Erro ao salvar configurações.");
    }
  }
}

export const fechamentoConfiguracoesService = new FechamentoConfiguracoesService();
