import { queryOptions } from "@tanstack/react-query"; import apiFetch from "../../utils/api"; import { jsonQuery } from "../apiAdapter"; interface LocationRaw { users?: { first_name: string; last_name: string }; user_name?: string; shift_date: string; arrival_time?: string | null; departure_time?: string | null; arrival_lat?: string | number | null; arrival_lng?: string | number | null; arrival_accuracy?: number | null; arrival_address?: string | null; departure_lat?: string | number | null; departure_lng?: string | number | null; departure_accuracy?: number | null; departure_address?: string | null; } export interface LocationRecord { user_name: string; shift_date: string; arrival_time?: string | null; departure_time?: string | null; arrival_lat?: string | number | null; arrival_lng?: string | number | null; arrival_accuracy?: number | null; arrival_address?: string | null; departure_lat?: string | number | null; departure_lng?: string | number | null; departure_accuracy?: number | null; departure_address?: string | null; } export const attendanceHistoryOptions = (filters: { month?: string; userId?: number; }) => queryOptions({ queryKey: ["attendance", "history", filters], queryFn: () => { const params = new URLSearchParams(); params.set("limit", "1000"); if (filters.month) params.set("month", filters.month); if (filters.userId) params.set("user_id", String(filters.userId)); return jsonQuery[]>( `/api/admin/attendance?${params.toString()}`, ); }, }); export const attendanceBalancesOptions = (year: number) => queryOptions({ queryKey: ["attendance", "balances", year], queryFn: () => jsonQuery>( `/api/admin/attendance?action=balances&year=${year}`, ), }); export const attendanceWorkFundOptions = (year: number) => queryOptions({ queryKey: ["attendance", "workfund", year], queryFn: () => jsonQuery>( `/api/admin/attendance?action=workfund&year=${year}`, ), }); export const attendanceProjectReportOptions = (year: number) => queryOptions({ queryKey: ["attendance", "project-report", year], queryFn: () => jsonQuery>( `/api/admin/attendance?action=project_report&year=${year}`, ), }); export const attendanceLocationOptions = (id: string | undefined) => queryOptions({ queryKey: ["attendance", "location", id], queryFn: async (): Promise => { const response = await apiFetch( `/api/admin/attendance?action=location&id=${id}`, ); const result = await response.json(); if (!result.success) { throw new Error(result.error || "Záznam nebyl nalezen"); } const raw = (result.data.record || result.data) as LocationRaw; const userName = raw.users ? `${raw.users.first_name} ${raw.users.last_name}`.trim() : raw.user_name || ""; const { users: _users, ...rest } = raw; return { ...rest, user_name: userName }; }, enabled: !!id, });