using Microsoft.Zune.Util;
using System;
using System.Collections;
using ZuneUI;

namespace Microsoft.Zune.Service
{
    public interface IService
    {
        int AddPaymentInstrument(PaymentInstrument paymentInstrument, AddPaymentInstrumentCompleteCallback completeCallback, AddPaymentInstrumentErrorCallback errorCallback);
        int AddPaymentInstrument(PaymentInstrument paymentInstrument, out string paymentId, out ServiceError serviceError);
        HRESULT AuthenticatePassport(string username, string password, EPassportPolicyId ePassportPolicyId, out PassportIdentity passportIdentity);
        bool BlockExplicitContent();
        bool BlockRatedContent(string system, string rating);
        void CancelDownload(Guid guidMediaId, EContentType eContentType);
        void CancelSignIn();
        bool CanDownloadSubscriptionContent();
        bool CanSignedInUserPostUsageData();
        bool ClearLastSignedInUser();
        AppOfferCollection CreateEmptyAppCollection();
        bool DeleteSubscriptionDownloads(AsyncCompleteHandler eventHandler);
        void Dispose();
        void Download(IList items, EDownloadFlags eDownloadFlags, string deviceEndpointId, EDownloadContextEvent clientContextEvent, string clientContextEventData, DownloadEventHandler eventHandler, DownloadEventProgressHandler progressHandler, EventHandler allPendingHandler);
        bool GetAlbumIdFromCompId(string compId, out Guid guidAlbum);
        void GetBalances(GetBalancesCompleteCallback completeCallback, GetBalancesErrorCallback errorCallback);
        EContentType GetContentType(string contentTypeStr);
        HRESULT GetContentUri(Guid guidMediaId, EContentType eContentType, EContentUriFlags eContentUriFlags, bool fIsHD, bool fIsRental, out string uriOut);
        HRESULT GetContentUri(Guid guidMediaId, EContentType eContentType, EContentUriFlags eContentUriFlags, EMediaFormat eMediaFormat, EMediaRights eMediaRights, out string uriOut, out Guid mediaInstanceIdOut);
        HRESULT GetContentUri(Guid guidMediaId, EContentType eContentType, EContentUriFlags eContentUriFlags, out string uriOut, out Guid mediaInstanceIdOut);
        CountryBaseDetails[] GetCountryDetails();
        string GetEndPointUri(EServiceEndpointId eServiceEndpointId);
        DRMInfo GetFileDRMInfo(string filePath);
        bool GetLastSignedInUserGuid(out int iUserId, out Guid guidUserGuid);
        void GetLastSignedInUserSubscriptionState(out bool activeSubscription, out ulong subscriptionId);
        string GetLocale();
        string GetMachineId();
        DRMInfo GetMediaDRMInfo(Guid mediaId, EContentType eContentType);
        EMediaStatus GetMediaStatus(Guid guidMediaId, EContentType eContentType);
        bool GetMusicVideoIdFromCompId(string compId, out Guid guidMusicVideo);
        HRESULT GetOfferDetails(Guid offerId, GetOfferDetailsCompleteCallback completeCallback, GetOfferDetailsErrorCallback errorCallback, object state);
        void GetOffers(IList albumGuids, IList trackGuids, IList videoGuids, IList appGuids, IDictionary mapIdToContext, EGetOffersFlags eGetOffersFlags, string deviceEndpointId, GetOffersCompleteCallback completeCallback, GetOffersErrorCallback errorCallback);
        ulong GetPassportPuid();
        string GetPassportTicket(EPassportPolicyId ePassportPolicy);
        void GetPaymentInstruments(GetPaymentInstrumentsCompleteCallback completeCallback, GetPaymentInstrumentsErrorCallback errorCallback);
        IList GetPersistedUsernames();
        string GetPhoneClientType(string strPhoneOsVersion);
        int GetPointsBalance();
        void GetPointsOffers(GetBillingOffersCompleteCallback completeCallback, GetBillingOffersErrorCallback errorCallback);
        RatingSystemBase[] GetRatingSystems();
        int GetRentalTermDays(string strStudio);
        int GetRentalTermHours(string strStudio);
        uint GetSignedInGeoId();
        string GetSignedInUsername();
        string GetSignInAtStartupUsername();
        void GetSubscriptionDetails(ulong offerId, GetBillingOffersCompleteCallback completeCallback, GetBillingOffersErrorCallback errorCallback);
        string GetSubscriptionDirectory();
        DateTime GetSubscriptionEndDate();
        int GetSubscriptionFreeTrackBalance();
        DateTime GetSubscriptionFreeTrackExpiration();
        ulong GetSubscriptionOfferId();
        void GetSubscriptionOffers(GetBillingOffersCompleteCallback completeCallback, GetBillingOffersErrorCallback errorCallback);
        ulong GetSubscriptionRenewalOfferId();
        int GetSubscriptionTrialDuration();
        ValueType GetUserGuid();
        bool GetUserRating(int iUserId, Guid guidMediaId, EContentType eContentType, ref int piRating);
        string GetWMISEndPointUri(string strEndPointName);
        string GetXboxPuid();
        string GetXboxTicket();
        string GetZuneTag();
        bool HasSignInBillingViolation();
        bool HasSignInLabelTakedown();
        bool InCompleteCollection(Guid guidMediaId, EContentType eContentType);
        bool InCompleteCollection(Guid guidMediaId, EContentType eContentType, out int dbMediaId, out bool fHidden);
        bool InCompleteCollection(Guid guidMediaId, EContentType eContentType, string strDeviceEndpointId);
        bool InCompleteCollection(Guid guidMediaId, EContentType eContentType, string strDeviceEndpointId, out int dbMediaId, out bool fHidden);
        bool InHiddenCollection(Guid guidMediaId, EContentType eContentType);
        int InitializeWMISEndpointCollection();
        bool InVisibleCollection(Guid guidMediaId, EContentType eContentType);
        bool InVisibleCollection(Guid guidMediaId, EContentType eContentType, out int dbMediaId);
        bool IsDownloading(Guid guidMediaId, EContentType eContentType, out bool fIsDownloadPending, out bool fIsHidden);
        bool IsLightWeight();
        bool IsParentallyControlled();
        bool IsSignedIn();
        bool IsSignedInWithSubscription();
        bool IsSigningIn();
        bool LaunchBrowserForExternalUrl(string strUrl, EPassportPolicyId ePassportPolicy);
        int Phase3Initialize();
        bool PostAppReview(Guid mediaId, string title, string comment, int rating, AsyncCompleteHandler callback);
        int PurchaseBillingOffer(BillingOffer offer, PaymentInstrument paymentInstrument);
        int PurchaseBillingOffer(BillingOffer offer, PaymentInstrument paymentInstrument, AsyncCompleteHandler callback);
        void PurchaseOffers(PaymentInstrument payment, AlbumOfferCollection albumOffers, TrackOfferCollection trackOffers, VideoOfferCollection videoOffers, AppOfferCollection appOffers, EPurchaseOffersFlags ePurchaseOffersFlags, PurchaseOffersCompleteHandler purchaseOffersHandler);
        void RefreshAccount(AsyncCompleteHandler eventHandler);
        void RegisterForDownloadNotification(DownloadEventHandler eventHandler, DownloadEventProgressHandler progressHandler, EventHandler allPendingHandler);
        void RemovePersistedUsername(string strUsername);
        bool ReportAConcern(EConcernType concernType, EContentType contentType, Guid mediaId, string message, AsyncCompleteHandler callback);
        bool ReportFavouriteArtists(Guid userId, IList artists, AsyncCompleteHandler callback);
        void ReportStreamingAction(EStreamingActionType eStreamingActionType, Guid guidMediaInstanceId, AsyncCompleteHandler eventHandler);
        int ResumePurchase(string resumeHandle, string authorizationToken, AsyncCompleteHandler callback);
        bool SetLastSignedInUserGuid(ref Guid guidUserGuid, out int iUserId);
        bool SetUserArtistRating(int iUserId, int iRating, Guid guidArtistMediaId, string strTitle);
        bool SetUserTrackRating(int iUserId, int iRating, Guid guidTrackMediaId, Guid guidAlbumMediaId, int iTrackNumber, string strTitle, int msDuration, string strAlbum, string strArtist, string strGenre, string strServiceContext);
        void SignIn(string strUsername, string strPassword, bool fRememberUsername, bool fRememberPassword, bool fAutomaticallySignInAtStartup, AsyncCompleteHandler eventHandler);
        bool SignInAtStartup(string strUsername);
        bool SignInPasswordRequired(string strUsername);
        void SignOut();
        bool SubscriptionPendingCancel();
        int VerifyToken(string token, out TokenDetails tokenDetails);
    }
}