#import "CRSessionDelegate.h"

#import "CRSessionController.h"

@interface CRSessionDelegate ()

@property (nonatomic, weak) CRSessionController *sessionController;

@end

@implementation CRSessionDelegate

- (instancetype)initWithSessionController:(CRSessionController *)sessionController
{
    self = [super init];
    if (self) {
        _sessionController = sessionController;
    }
    return self;
}

+ (instancetype)sessionDelegateWithSessionController:(CRSessionController *)sessionController
{
    CRSessionDelegate *delegate = [[self alloc] initWithSessionController:sessionController];
    return delegate;
}

#pragma mark - NSURLSessionTaskDelegate

- (void)URLSession:(NSURLSession *)session
              task:(NSURLSessionTask *)task
willPerformHTTPRedirection:(NSHTTPURLResponse *)response
        newRequest:(NSURLRequest *)request
 completionHandler:(void (^)(NSURLRequest *))completionHandler
{
    id delegate = [self.sessionController NSURLSessionTaskDelegateForTask:task];
    if ([delegate respondsToSelector:@selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)]) {
        [delegate URLSession:session
                        task:task
  willPerformHTTPRedirection:response
                  newRequest:request
           completionHandler:completionHandler];
    } else {
        if (completionHandler) completionHandler(request);
    }
}

- (void)URLSession:(NSURLSession *)session
              task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition,
                             NSURLCredential *))completionHandler
{
    id delegate = [self.sessionController NSURLSessionTaskDelegateForTask:task];
    if ([delegate respondsToSelector:@selector(URLSession:task:didReceiveChallenge:completionHandler:)]) {
        [delegate URLSession:session
                        task:task
         didReceiveChallenge:challenge
           completionHandler:completionHandler];
    } else {
        if (completionHandler) {
            completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
        }
    }
}

@end
