// // MockEmployeeService.swift // EmployeeDirectory // // Created by Matt Bruce on 1/21/25. // import Foundation public class MockEmployeeService: EmployeeServiceProtocol { // MARK: - Properties public static let shared = MockEmployeeService() // Default shared instance private var employees: Employees // MARK: - Initializer public init() { let jsonFileName = "localTest" guard let url = Bundle.main.url(forResource: jsonFileName, withExtension: "json"), let data = try? Data(contentsOf: url), let localData = try? JSONDecoder().decode(Employees.self, from: data) else { employees = .init(employees: [], total: 0, page: 0, perPage: 0) return } employees = localData } public func getEmployees(_ serviceMode: EmployeeServiceMode) async throws -> Employees { return employees } public func getEmployees(_ serviceMode: EmployeeServiceMode = .production, page: Int, perPage: Int, sortField: EmployeeSortField = .team, sortOrder: EmployeeSortOrder = .ascending) async throws -> Employees { employees = .init(employees: employees.employees.sorted(by: sortField, with: sortOrder), total: employees.employees.count, page: page, perPage: perPage) let totalUsers = employees.employees.count let startIndex = (page - 1) * perPage let endIndex = min(startIndex + perPage, totalUsers) guard startIndex < totalUsers else { return .init(employees: [], total: totalUsers, page: page, perPage: perPage) // Return empty if out of bounds } let paginatedUsers = Array(employees.employees[startIndex.. [Employee] { switch field { case .fullName: return option == .ascending ? sorted { $0.fullName < $1.fullName } : sorted { $0.fullName > $1.fullName } case .team: return option == .ascending ? sorted { $0.team < $1.team || ($0.team == $1.team && $0.fullName < $1.fullName) } : sorted { $0.team > $1.team || ($0.team == $1.team && $0.fullName < $1.fullName) } case .employeeType: return option == .ascending ? sorted { $0.employeeType.rawValue < $1.employeeType.rawValue || ($0.employeeType.rawValue == $1.employeeType.rawValue && $0.fullName < $1.fullName) } : sorted { $0.employeeType.rawValue > $1.employeeType.rawValue || ($0.employeeType.rawValue == $1.employeeType.rawValue && $0.fullName < $1.fullName) } } } }