import axios from 'axios';
import store from './store';

export const backendBaseUrl = import.meta.env.VITE_BACKEND
  || (import.meta.env.DEV ? 'http://localhost:3005' : window.location.origin);

const apiClient = axios.create({
  baseURL: `${backendBaseUrl}/api`,
  timeout: 60000, // 60 Sekunden Timeout für Requests (länger für langsame Verbindungen)
  // Erlaube längere Verbindungen
  maxRedirects: 5,
  validateStatus: function (status) {
    // Behandle alle Status-Codes als gültig, damit wir sie selbst behandeln können
    return status >= 200 && status < 600;
  },
});

apiClient.interceptors.request.use(config => {
  const token = store.getters.token;
  const user = store.getters.username;

  if (token) {
    config.headers['authcode'] = token;
  }
  if (user) {
    config.headers['userid'] = user;
  }

  return config;
});

// Response-Interceptor für automatische Logout-Behandlung bei 401
apiClient.interceptors.response.use(
  response => response,
  error => {
    // Prüfe auf Netzwerkfehler (keine Response = Verbindungsproblem)
    if (!error.response) {
      // Wenn es ein Timeout oder Netzwerkfehler ist, nicht automatisch ausloggen
      if (error.code === 'ECONNABORTED' || error.code === 'ERR_NETWORK' || error.message === 'Network Error') {
        console.warn('[API Client] Netzwerkfehler oder Timeout:', error.message);
        // Wirft den Fehler weiter, aber ohne automatisches Logout
        return Promise.reject(error);
      }
    }
    
    if (error.response && error.response.status === 401) {
      // Automatisch ausloggen und zur Login-Seite weiterleiten
      store.dispatch('logout');
    }
    return Promise.reject(error);
  }
);

export default apiClient;
