import Foundation

public extension DeeplinkIntent {
    static func handleTiktokShareResult(queryParams: [String: String]) -> ShareStatus {
        guard let shareStateString = queryParams["share_state"],
              let shareStateInt = Int(shareStateString),
              let tiktokStatus = TiktokShareStatus(rawValue: shareStateInt)
        else {
            return .sharingError(reason: "share_state param missing")
        }

        switch tiktokStatus {
        case .success:
            return .sharedSuccessfully
        case .sharingCanceled:
            return .sharingCancelled
        default:
            return .sharingError(reason: tiktokStatus.description)
        }
    }
}

public enum ShareStatus: Equatable {
    case sharedSuccessfully
    case sharingCancelled
    case sharingError(reason: String)
}

// Source: https://developers.tiktok.com/doc/share-kit-ios-quickstart-v2/
public enum TiktokShareStatus: Int {
    case success = 20000
    case unknownError = 20001
    case paramsParsingError = 20002
    case permissionNotGranted = 20003
    case userNotLoggedIn = 20004
    case noAlbumPermissions = 20005
    case networkError = 20006
    case videoLengthError = 20007
    case photoRequirementsNotMet = 20008
    case timeStampCheckFailed = 20009
    case photoProcessingFailed = 20010
    case videoResolutionError = 20011
    case unsupportedVideoFormat = 20012
    case sharingCanceled = 20013
    case anotherVideoUploading = 20014
    case savedAsDraft = 20015
    case postingFailed = 20016
    case iCloudDownloadFailed = 21001
    case internalParamsParsingError = 21002
    case mediaResourcesDoNotExist = 21003

    var description: String {
        switch self {
        case .success:
            return "Success."
        case .unknownError:
            return "Unknown or current SDK version unclassified error."
        case .paramsParsingError:
            return "Params parsing error."
        case .permissionNotGranted:
            return "Permission not granted"
        case .userNotLoggedIn:
            return "User not logged in."
        case .noAlbumPermissions:
            return "TikTok has no album permissions."
        case .networkError:
            return "TikTok Network error."
        case .videoLengthError:
            return "Video length doesn't meet requirements."
        case .photoRequirementsNotMet:
            return "Photo doesn't meet requirements."
        case .timeStampCheckFailed:
            return "Time stamp check failed."
        case .photoProcessingFailed:
            return "Processing photo resources failed."
        case .videoResolutionError:
            return "Video resolution doesn't meet requirements."
        case .unsupportedVideoFormat:
            return "Video format is not supported."
        case .sharingCanceled:
            return "Sharing canceled."
        case .anotherVideoUploading:
            return "Another video is currently uploading."
        case .savedAsDraft:
            return "User saved the shared content as a draft"
        case .postingFailed:
            return "Posting failed"
        case .iCloudDownloadFailed:
            return "Downloading from iCloud failed."
        case .internalParamsParsingError:
            return "Internal params parsing error."
        case .mediaResourcesDoNotExist:
            return "Media resources do not exist."
        }
    }
}
