import Foundation class PostService { static let shared = PostService() private var posts: [Post] = [] init() { generateMockPosts() } private func generateMockPosts() { guard posts.isEmpty else { return } let sampleTitles = [ "Обзор TikTok UI", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс", "Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы", "Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс", "Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы", "Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс", "Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы", "Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс", "Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы", "Лучший UI 2025", "Мой первый ролик", "Котик в кадре", "SwiftUI мастер-класс", "Анимации и переходы", "Съёмка с дрона", "Урок по дизайну", "Как сделать свайпы", "Лучший UI 2025", "Завершаем проект" ] let sampleDescriptions = [ "Первый тестовый пост с видео", "Фейковый контент для ленты", "Видео с котиком 🐱", "Интерфейс в стиле TikTok", "Просто тестирую отображение", "Код и UI — любовь", "Видео в реальном времени", "Интересный UX пример", "Анимации, переходы, свайпы", "Фейковый контент для ленты", "Видео с котиком 🐱", "Интерфейс в стиле TikTok", "Просто тестирую отображение", "Код и UI — любовь", "Видео в реальном времени", "Интересный UX пример", "Анимации, переходы, свайпы", "Фейковый контент для ленты", "Видео с котиком 🐱", "Интерфейс в стиле TikTok", "Просто тестирую отображение", "Код и UI — любовь", "Видео в реальном времени", "Интересный UX пример", "Анимации, переходы, свайпы", "Фейковый контент для ленты", "Видео с котиком 🐱", "Интерфейс в стиле TikTok", "Просто тестирую отображение", "Код и UI — любовь", "Видео в реальном времени", "Интересный UX пример", "Анимации, переходы, свайпы", "Вот это да, пост работает!" ] for i in 0..<32 { let postID = UUID() let authorId = UUID() let authorUserName = "username_\(Int.random(in: 1...5))" let thumbID = UUID() var mediaItems: [MediaItem] = [] var mediaOrder: [UUID] = [] let mediaTypeChoice = Int.random(in: 0...2) if mediaTypeChoice == 0 { // Single Video let mediaID = UUID() let width = 1080 let randomRatio = Double.random(in: 1.0...1.77) let height = Int(Double(width) * randomRatio) mediaItems.append(MediaItem(id: mediaID, type: .video, width: width, height: height)) mediaOrder.append(mediaID) } else if mediaTypeChoice == 1 { // Single Photo let mediaID = UUID() let width = 1080 let randomRatio = Double.random(in: 1.0...1.77) let height = Int(Double(width) * randomRatio) mediaItems.append(MediaItem(id: mediaID, type: .photo, width: width, height: height)) mediaOrder.append(mediaID) } else { // Photo Gallery let numberOfPhotos = Int.random(in: 2...5) for _ in 0.. Void) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { completion(self.posts) } } func fetchPost(by id: UUID, completion: @escaping (Post?) -> Void) { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { let result = self.posts.first { $0.id == id } completion(result) } } }