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 mediaID = UUID() let thumbID = Bool.random() ? UUID() : nil let postID = UUID() let post = Post( id: postID, title: sampleTitles[i], description: sampleDescriptions[i], media: [ MediaItem(id: mediaID, type: .video) ], mediaOrder: [mediaID], thumbnailID: thumbID, duration: Double.random(in: 15.0...180.0), createdAt: Date(), updatedAt: Date(), views: Int.random(in: 1_000...10_000), likes: Int.random(in: 100...2_000), saves: Int.random(in: 10...500), commentsCount: Int.random(in: 0...100), isLikedByCurrentUser: Bool.random(), isSavedByCurrentUser: Bool.random(), authorID: "user_\(Int.random(in: 1...5))", hashtags: ["#тест", "#видео", "#swiftui", "#ui"].shuffled().prefix(2).map { $0 }, location: Bool.random() ? "Москва" : nil, languageCode: Bool.random() ? ["ru", "en"] : ["ru"], accessLevel: [.public, .friends, .archive].randomElement()! ) posts.append(post) } } func fetchAllPosts(completion: @escaping ([Post]) -> 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) } } }