import Foundation // MARK: - PulseTask struct PulseTask: Codable, Identifiable { let id: Int var title: String var description: String? var completed: Bool var priority: Int? var icon: String? var color: String? var dueDate: String? var reminderTime: String? var createdAt: String? var isRecurring: Bool? var recurrenceType: String? var recurrenceInterval: Int? var priorityColor: String { switch priority { case 4: return "ff0000" case 3: return "ff4757" case 2: return "ffa502" default: return "8888aa" } } var priorityDisplayName: String { switch priority { case 1: return "Низкий" case 2: return "Средний" case 3: return "Высокий" case 4: return "Срочный" default: return "Без приоритета" } } var isOverdue: Bool { guard !completed, let due = dueDate else { return false } let dateStr = String(due.prefix(10)) let today = ISO8601DateFormatter().string(from: Date()).prefix(10) return dateStr < today } var dueDateFormatted: String? { guard let due = dueDate else { return nil } let dateStr = String(due.prefix(10)) let todayStr = String(ISO8601DateFormatter().string(from: Date()).prefix(10)) let tomorrowDate = Calendar.current.date(byAdding: .day, value: 1, to: Date())! let tomorrowStr = String(ISO8601DateFormatter().string(from: tomorrowDate).prefix(10)) if dateStr == todayStr { return "Сегодня" } if dateStr == tomorrowStr { return "Завтра" } let parts = dateStr.split(separator: "-") guard parts.count == 3 else { return dateStr } return "\(parts[2]).\(parts[1]).\(parts[0])" } enum CodingKeys: String, CodingKey { case id, title, description, completed, priority, icon, color case dueDate = "due_date" case reminderTime = "reminder_time" case createdAt = "created_at" case isRecurring = "is_recurring" case recurrenceType = "recurrence_type" case recurrenceInterval = "recurrence_interval" } } // MARK: - TaskStats struct TaskStats: Codable { let totalTasks: Int? let completedTasks: Int? let todayTasks: Int? let todayCompleted: Int? enum CodingKeys: String, CodingKey { case totalTasks = "total_tasks" case completedTasks = "completed_tasks" case todayTasks = "today_tasks" case todayCompleted = "today_completed" } } // MARK: - CreateTaskRequest struct CreateTaskRequest: Codable { var title: String var description: String? var priority: Int? var dueDate: String? var icon: String? var color: String? enum CodingKeys: String, CodingKey { case title, description, priority, icon, color case dueDate = "due_date" } } // MARK: - UpdateTaskRequest struct UpdateTaskRequest: Codable { var title: String? var description: String? var priority: Int? var dueDate: String? var completed: Bool? enum CodingKeys: String, CodingKey { case title, description, priority, completed case dueDate = "due_date" } }