import APIClient
import Foundation

extension Clip {
    static func skeleton(_ id: String) -> Clip {
        .init(
            clipId: .init(remoteId: id),
            audioUrl: "",
            title: "",
            prompt: "",
            modelName: "",
            majorModelVersion: "",
            gptDescriptionPrompt: "",
            imageUrl: "",
            largeImageUrl: "",
            tags: "",
            displayTags: "",
            playCount: 0,
            upvoteCount: 0,
            isPublic: false,
            duration: 0,
            hasVocal: false,
            canPublishWithVocal: false,
            status: .complete,
            displayName: "",
            userId: "",
            handle: "",
            isTrashed: false,
            isPinned: false
        )
    }
}

extension StyleItem {
    static func skeleton(_ id: String) -> StyleItem {
        .init(id: id, name: "", imageUrl: "", redirectUrl: "")
    }
}

extension PlaylistSection {
    static func skeleton(_ id: String) -> PlaylistSection {
        .init(id: id, title: "", description: "", items: [Clip.skeleton("id-1"), Clip.skeleton("id-2"), Clip.skeleton("id-3")], previewItemsCount: 1)
    }
}

extension StyleListSection {
    static func skeleton(_ id: String) -> StyleListSection {
        .init(id: id, title: "", items: [StyleItem.skeleton("id-1"), StyleItem.skeleton("id-2"), StyleItem.skeleton("id-3")])
    }
}

extension DiscoverFeed {
    static var skeleton: DiscoverFeed {
        .init(sectionIndex: 0,
              sections: [
                  .playlist(.skeleton("skeleton-playlist-1")),
                  .playlist(.skeleton("skeleton-playlist-2")),
                  .style(.skeleton("skeleton-style-1")),
                  .style(.skeleton("skeleton-style-2")),
                  .style(.skeleton("skeleton-style-3")),
                  .style(.skeleton("skeleton-style-4")),
                  .style(.skeleton("skeleton-style-5")),
                  .style(.skeleton("skeleton-style-6")),
              ],
              totalSections: 4,
              pageSize: 4)
    }
}
