export interface Zone { id: number; name: string; imagePath?: string; lastMowedDate?: string; intervalDays?: number; nextMowDate?: string; scheduleType: 'interval' | 'specific'; area: number; createdAt: string; daysSinceLastMow?: number; daysUntilNext?: number; status: 'ok' | 'due' | 'overdue' | 'new'; isOverdue: boolean; isDueToday: boolean; isNew: boolean; } export interface ZoneFormData { name: string; intervalDays?: number; lastMowedDate?: string; nextMowDate?: string; scheduleType: 'interval' | 'specific'; area: number; image?: File; } export interface Mower { id: number; name: string; type: string; brand?: string; model?: string; isActive: boolean; createdAt: string; } export interface MowerFormData { name: string; type: string; brand?: string; model?: string; } export interface MowingHistory { id: number; zoneId: number; zoneName: string; zoneArea: number; mowerId?: number; mowerName?: string; mowerType?: string; mowedDate: string; notes?: string; sessionId?: string; duration?: number; // in minutes weather?: string; createdAt: string; } export interface MowingHistoryResponse { data: MowingHistory[]; pagination: { total: number; currentPage: number; totalPages: number; hasNextPage: boolean; hasPrevPage: boolean; limit: number; offset: number; }; } export interface MowingStats { period: number; totalSessions: number; totalMinutes: number; totalArea: number; mostActiveZone: { name: string; sessions: number; } | null; mostUsedMower: { name: string; type: string; sessions: number; } | null; dailyActivity: { date: string; sessions: number; duration: number; area: number; }[]; } export interface MowingFormData { notes?: string; duration?: number; weather?: string; mowerId?: number; } export interface BulkMowingFormData { selectedZoneIds: number[]; notes?: string; totalDuration?: number; weather?: string; mowerId?: number; }