// resources/assets/ts/ContactsPage/constants/filters.ts

// this is for mapping the kategorie, prioritaet and branche dynamically for display in the getadr allgemeine info table

export interface Option {
  label: string;
  value: number | string;
  checked: boolean;
  color?: string;
}

// Dynamic maps (start empty)
let dynamicStatusMap: Record<number, string> = {};
let dynamicBrancheMap: Record<number, string> = {};
let dynamicPotenzialMap: Record<number, string> = {};

// Track loading state
let isLoaded = false;
let loadError: string | null = null;

/**
 * Load dynamic filter options from backend
 */
export async function loadDynamicFilterOptions(): Promise<void> {
  try {
    const response = await fetch('/contacts/filter-options', {
      headers: { Accept: 'application/json' },
      credentials: 'include',
    });
    
    if (!response.ok) {
      throw new Error(`Failed to fetch filter options: ${response.status}`);
    }
    
    const data = await response.json();
    
    // Build dynamic maps from API response
    if (data.status) {
      dynamicStatusMap = data.status
        .filter((opt: Option) => typeof opt.value === 'number')
        .reduce((map: Record<number, string>, opt: Option) => {
          map[opt.value as number] = opt.label;
          return map;
        }, {});
    }
    
    if (data.branche) {
      dynamicBrancheMap = data.branche
        .filter((opt: Option) => typeof opt.value === 'number')
        .reduce((map: Record<number, string>, opt: Option) => {
          map[opt.value as number] = opt.label;
          return map;
        }, {});
    }
    
    if (data.prioritaet) {
      dynamicPotenzialMap = data.prioritaet
        .filter((opt: Option) => typeof opt.value === 'number')
        .reduce((map: Record<number, string>, opt: Option) => {
          map[opt.value as number] = opt.label;
          return map;
        }, {});
    }
    
    isLoaded = true;
    loadError = null;
    console.log('✅ Dynamic filter options loaded successfully');
    console.log('Status map:', dynamicStatusMap);
    console.log('Branche map:', dynamicBrancheMap);
    console.log('Potenzial map:', dynamicPotenzialMap);
  } catch (error) {
    isLoaded = false;
    loadError = error instanceof Error ? error.message : 'Unknown error';
    console.error('❌ Error loading filter options:', error);
    throw error; // Re-throw to let component handle it
  }
}

/**
 * Get label functions - no fallback
 */
export function getStatusLabel(value: number): string {
  return dynamicStatusMap[value] || 'Unbekannt';
}

export function getBrancheLabel(value: number): string {
  return dynamicBrancheMap[value] || 'Unbekannt';
}

export function getPotenzialLabel(value: number): string {
  return dynamicPotenzialMap[value] || 'Unbekannt';
}

/**
 * Check if filters are loaded
 */
export function isFiltersLoaded(): boolean {
  return isLoaded;
}

/**
 * Get load error if any
 */
export function getLoadError(): string | null {
  return loadError;
}