import Foundation // MARK: - FinanceTransaction struct FinanceTransaction: Codable, Identifiable { let id: Int var amount: Double var categoryId: Int? var description: String? var type: String // "income" or "expense" var date: String? var createdAt: String? var isIncome: Bool { type == "income" } var dateFormatted: String { guard let d = date else { return "" } let parts = String(d.prefix(10)).split(separator: "-") guard parts.count == 3 else { return String(d.prefix(10)) } return "\(parts[2]).\(parts[1]).\(parts[0])" } var dateOnly: String { String(date?.prefix(10) ?? "") } enum CodingKeys: String, CodingKey { case id, amount, description, type, date case categoryId = "category_id" case createdAt = "created_at" } } // MARK: - FinanceCategory struct FinanceCategory: Codable, Identifiable { let id: Int var name: String var icon: String? var color: String? var type: String } // MARK: - FinanceSummary struct FinanceSummary: Codable { var totalIncome: Double? var totalExpense: Double? var balance: Double? var carriedOver: Double? var month: String? var byCategory: [CategorySpend]? var daily: [DailySpend]? enum CodingKeys: String, CodingKey { case balance, month case totalIncome = "total_income" case totalExpense = "total_expense" case carriedOver = "carried_over" case byCategory = "by_category" case daily } } struct CategorySpend: Codable, Identifiable { var id: Int { categoryId ?? 0 } var categoryId: Int? var categoryName: String? var total: Double? var icon: String? var color: String? enum CodingKeys: String, CodingKey { case total, icon, color case categoryId = "category_id" case categoryName = "category_name" } } struct DailySpend: Codable, Identifiable { var id: String { date } let date: String let total: Double? let income: Double? let expense: Double? } // MARK: - FinanceAnalytics struct FinanceAnalytics: Codable { var currentMonth: FinanceSummary? var previousMonth: FinanceSummary? var byCategory: [CategorySpend]? enum CodingKeys: String, CodingKey { case currentMonth = "current_month" case previousMonth = "previous_month" case byCategory = "by_category" } } // MARK: - CreateTransactionRequest struct CreateTransactionRequest: Codable { var amount: Double var categoryId: Int? var description: String? var type: String var date: String? enum CodingKeys: String, CodingKey { case amount, description, type, date case categoryId = "category_id" } }