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 thumbID = UUID()
            let postID = UUID()
            
            let authorId = UUID()
            let authorUserName = "username_\(Int.random(in: 1...5))"
//            let authorId = "user_\(Int.random(in: 1...5))"
            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: authorId,
                authorUsername: authorUserName,
                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)
        }
    }
}
