import prafrotRoutes from '../config/prafrotRoutes.json';
import oestPanRoutes from '../config/oestPanRoutes.json';

const ALL_ROUTES = {
  prafrot: prafrotRoutes.routes,
  'oest-pan': oestPanRoutes.routes,
  // Adicionar outros módulos conforme forem centralizados
};

/**
 * Gerenciador de Rotas de API
 * Centraliza a resolução de caminhos, parâmetros e metadados das rotas.
 */
class ApiRouteManager {
  /**
   * Obtém a configuração completa de uma rota
   * @param {string} routeKey Chave no formato 'modulo.entidade.acao' (ex: 'prafrot.vehicles.list')
   */
  getRoute(routeKey) {
    const keys = routeKey.split('.');
    let current = ALL_ROUTES;
    
    for (const key of keys) {
      if (!current[key]) {
        console.warn(`[ApiRouteManager] Rota não encontrada: ${routeKey}`);
        return null;
      }
      current = current[key];
    }
    
    return current;
  }

  /**
   * Resolve a URL de uma rota, substituindo parâmetros dinâmicos (:id)
   * @param {string} routeKey Chave da rota
   * @param {Object} params Parâmetros para substituição (ex: { id: 123 })
   */
  getUrl(routeKey, params = {}) {
    const route = this.getRoute(routeKey);
    if (!route || !route.path) return '';

    let url = route.path;
    
    // Substitui parâmetros nos estilos :param e {param}
    Object.keys(params).forEach(key => {
      url = url.replace(`:${key}`, params[key]);
      url = url.replace(`{${key}}`, params[key]);
    });

    return url;
  }

  /**
   * Obtém os campos (fields) definidos para uma rota de criação/edição
   * Útil para geradores dinâmicos de formulários.
   */
  getFields(routeKey) {
    const route = this.getRoute(routeKey);
    return route?.fields || {};
  }

  /**
   * Obtém a configuração de apresentação (tabelas, cards, destaques)
   * @param {string} routeKey Chave da entidade (ex: 'prafrot.maintenance')
   */
  getPresentation(routeKey) {
    const route = this.getRoute(routeKey);
    return route?.presentation || null;
  }

  /**
   * Obtém metadados adicionais da rota
   */
  getMetadata(routeKey) {
    const route = this.getRoute(routeKey);
    return route?.metadata || {};
  }
}

export const apiRouteManager = new ApiRouteManager();
export default apiRouteManager;
