{"version":3,"sources":["../src/hooks/useComparator.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport {\n  ComparatorTabValue,\n  type ComparisonType,\n  type ComparatorTabType,\n  type ComparatorData,\n  type KnowledgeAreaData,\n  type CurricularComponentData,\n  type CompetencyData,\n  type NationalAverageData,\n  type ComparatorApiClient,\n  type KnowledgeAreasApiItem,\n  type CurricularComponentsApiItem,\n  type CompetenciesApiItem,\n  type NationalAveragesApiItem,\n  type UseComparatorReturn,\n} from '../types/comparator';\nimport { Period } from '../components/PeriodSelector';\n\n// Transform backend response to frontend format\nfunction transformKnowledgeAreas(\n  apiData: KnowledgeAreasApiItem[]\n): KnowledgeAreaData[] {\n  if (apiData.length === 0) return [];\n\n  const areaNames = apiData[0]?.areas.map((a) => a.name) ?? [];\n\n  return areaNames.map((areaName) => ({\n    area: areaName,\n    values: apiData.map((item) => {\n      const area = item.areas.find((a) => a.name === areaName);\n      return {\n        itemId: item.itemId,\n        percentage: area?.percentage ?? 0,\n      };\n    }),\n  }));\n}\n\nfunction transformCurricularComponents(\n  apiData: CurricularComponentsApiItem[]\n): CurricularComponentData[] {\n  if (apiData.length === 0) return [];\n\n  const subjectNames = apiData[0]?.subjects.map((s) => s.name) ?? [];\n\n  return subjectNames.map((subjectName) => ({\n    component: subjectName,\n    values: apiData.map((item) => {\n      const subject = item.subjects.find((s) => s.name === subjectName);\n      return {\n        itemId: item.itemId,\n        percentage: subject?.percentage ?? 0,\n      };\n    }),\n  }));\n}\n\nfunction transformCompetencies(\n  apiData: CompetenciesApiItem[]\n): CompetencyData[] {\n  if (apiData.length === 0) return [];\n\n  const competencyNumbers = apiData[0].competencies\n    .map((c) => c.competencyNumber)\n    .sort((a, b) => a - b);\n\n  return competencyNumbers.map((num) => ({\n    competency: `Competência ${num}`,\n    values: apiData.map((item) => {\n      const comp = item.competencies.find((c) => c.competencyNumber === num);\n      return {\n        itemId: item.itemId,\n        percentage: comp?.averagePercentage ?? 0,\n      };\n    }),\n  }));\n}\n\nfunction transformNationalAverages(\n  apiData: NationalAveragesApiItem[]\n): NationalAverageData[] {\n  return apiData.map((item) => {\n    const findArea = (name: string) =>\n      item.areas.find((a) => a.name.toLowerCase().includes(name.toLowerCase()));\n\n    const languages = findArea('linguagens');\n    const humanities = findArea('humanas');\n    const essay = findArea('redação') ?? findArea('essay');\n    const naturalSciences = findArea('natureza');\n    const mathematics = findArea('matemática');\n\n    return {\n      itemId: item.itemId,\n      itemName: item.itemName,\n      simulatedProficiency: item.overallTriScore,\n      publicAverage: item.publicSchoolAverage,\n      privateAverage: item.privateSchoolAverage,\n      details: {\n        languages: languages?.triScore ?? 0,\n        humanities: humanities?.triScore ?? 0,\n        essay: essay?.triScore ?? 0,\n        naturalSciences: naturalSciences?.triScore ?? 0,\n        mathematics: mathematics?.triScore ?? 0,\n      },\n      status: item.status,\n    };\n  });\n}\n\n// Unified comparator endpoint\nconst COMPARATOR_ENDPOINT = '/comparator';\n\nexport interface UseComparatorConfig {\n  apiClient: ComparatorApiClient;\n  endpoint?: string;\n  defaultPeriod?: string;\n}\n\nexport function createUseComparator(config: UseComparatorConfig) {\n  const {\n    apiClient,\n    endpoint = COMPARATOR_ENDPOINT,\n    defaultPeriod = Period.ONE_MONTH,\n  } = config;\n\n  return function useComparator(): UseComparatorReturn {\n    const [data, setData] = useState<ComparatorData>({\n      knowledgeAreas: [],\n      curricularComponents: [],\n      competencies: [],\n      nationalAverages: [],\n    });\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState<string | null>(null);\n\n    const fetchData = useCallback(\n      async (ids: string[], type: ComparisonType, tab: ComparatorTabType) => {\n        setLoading(true);\n        setError(null);\n\n        try {\n          const body =\n            type === 'school'\n              ? { type: tab, schoolIds: ids, period: defaultPeriod }\n              : { type: tab, schoolYearIds: ids, period: defaultPeriod };\n\n          const response = await apiClient.post(endpoint, body);\n          const apiData = response.data.data;\n\n          setData((prev) => {\n            const newData: ComparatorData = { ...prev };\n\n            switch (tab) {\n              case ComparatorTabValue.KNOWLEDGE_AREAS:\n                newData.knowledgeAreas = transformKnowledgeAreas(\n                  apiData as KnowledgeAreasApiItem[]\n                );\n                break;\n              case ComparatorTabValue.CURRICULAR_COMPONENTS:\n                newData.curricularComponents = transformCurricularComponents(\n                  apiData as CurricularComponentsApiItem[]\n                );\n                break;\n              case ComparatorTabValue.COMPETENCIES:\n                newData.competencies = transformCompetencies(\n                  apiData as CompetenciesApiItem[]\n                );\n                break;\n              case ComparatorTabValue.NATIONAL_AVERAGES:\n                newData.nationalAverages = transformNationalAverages(\n                  apiData as NationalAveragesApiItem[]\n                );\n                break;\n            }\n\n            return newData;\n          });\n        } catch (err) {\n          console.error('Erro ao buscar dados do comparador:', err);\n          setError('Erro ao carregar dados de comparação');\n        } finally {\n          setLoading(false);\n        }\n      },\n      []\n    );\n\n    return { data, loading, error, fetchData };\n  };\n}\n\n// Convenience function to create the hook\nexport function createComparatorHook(config: UseComparatorConfig) {\n  return createUseComparator(config);\n}\n"],"mappings":"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","names":[]}