//
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//

#import "AttachmentSharing.h"
#import "UIUtil.h"
#import <SessionCoreKit/Threading.h>
#import <SessionServiceKit/AppContext.h>
#import <SessionServiceKit/TSAttachmentStream.h>

NS_ASSUME_NONNULL_BEGIN

@implementation AttachmentSharing

+ (void)showShareUIForAttachments:(NSArray<TSAttachmentStream *> *)attachmentStreams
                       completion:(nullable AttachmentSharingCompletion)completion
{
    OWSAssertDebug(attachmentStreams.count > 0);

    NSMutableArray<NSURL *> *urls = [NSMutableArray new];
    for (TSAttachmentStream *attachmentStream in attachmentStreams) {
        [urls addObject:attachmentStream.originalMediaURL];
    }

    [AttachmentSharing showShareUIForActivityItems:urls completion:completion];
}

+ (void)showShareUIForAttachment:(TSAttachmentStream *)stream
{
    OWSAssertDebug(stream);

    [self showShareUIForURL:stream.originalMediaURL];
}

+ (void)showShareUIForURL:(NSURL *)url
{
    [self showShareUIForURL:url completion:nil];
}

+ (void)showShareUIForURL:(NSURL *)url completion:(nullable AttachmentSharingCompletion)completion
{
    OWSAssertDebug(url);
    
    [AttachmentSharing showShareUIForActivityItems:@[
                                                     url,
                                                     ]
                                        completion:completion];
}

+ (void)showShareUIForURLs:(NSArray<NSURL *> *)urls completion:(nullable AttachmentSharingCompletion)completion
{
    OWSAssertDebug(urls.count > 0);
    
    [AttachmentSharing showShareUIForActivityItems:urls
                                        completion:completion];
}

+ (void)showShareUIForText:(NSString *)text
{
    [self showShareUIForText:text completion:nil];
}

+ (void)showShareUIForText:(NSString *)text completion:(nullable AttachmentSharingCompletion)completion
{
    OWSAssertDebug(text);

    [AttachmentSharing showShareUIForActivityItems:@[
        text,
    ]
                                        completion:completion];
}

#ifdef DEBUG
+ (void)showShareUIForUIImage:(UIImage *)image
{
    OWSAssertDebug(image);

    [AttachmentSharing showShareUIForActivityItems:@[
        image,
    ]
                                        completion:nil];
}
#endif

+ (void)showShareUIForActivityItems:(NSArray *)activityItems completion:(nullable AttachmentSharingCompletion)completion
{
    OWSAssertDebug(activityItems);

    DispatchMainThreadSafe(^{
        UIActivityViewController *activityViewController =
            [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:@[]];

        [activityViewController setCompletionWithItemsHandler:^(UIActivityType __nullable activityType,
            BOOL completed,
            NSArray *__nullable returnedItems,
            NSError *__nullable activityError) {

            if (activityError) {
                OWSLogInfo(@"Failed to share with activityError: %@", activityError);
            } else if (completed) {
                OWSLogInfo(@"Did share with activityType: %@", activityType);
            }

            if (completion) {
                DispatchMainThreadSafe(completion);
            }
        }];

        UIViewController *fromViewController = CurrentAppContext().frontmostViewController;
        while (fromViewController.presentedViewController) {
            fromViewController = fromViewController.presentedViewController;
        }
        OWSAssertDebug(fromViewController);
        [fromViewController presentViewController:activityViewController animated:YES completion:nil];
    });
}

@end

NS_ASSUME_NONNULL_END
