//
//  MBIMHTTPUtilities.c
//  kordophoned
//
//  Created by James Magahern on 11/16/18.
//  Copyright © 2018 James Magahern. All rights reserved.
//

#include "MBIMHTTPUtilities.h"

static NSDateFormatter* _dateFormatterRFC822 = nil;
static NSDateFormatter* _dateFormatterISO8601 = nil;
static dispatch_queue_t _dateFormatterQueue = NULL;

__attribute__((constructor))
static void __InitializeDateFormatter()
{
    _dateFormatterQueue = dispatch_queue_create("dateFormatter", DISPATCH_QUEUE_SERIAL);
    
    _dateFormatterRFC822 = [[NSDateFormatter alloc] init];
    _dateFormatterRFC822.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    _dateFormatterRFC822.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";
    _dateFormatterRFC822.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    
    _dateFormatterISO8601 = [[NSDateFormatter alloc] init];
    _dateFormatterISO8601.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    _dateFormatterISO8601.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss'+00:00'";
    _dateFormatterISO8601.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
}

NSString* MBIMWebServerFormatRFC822(NSDate *date)
{
    __block NSString *string = nil;
    dispatch_sync(_dateFormatterQueue, ^{
        string = [_dateFormatterRFC822 stringFromDate:date];
    });
    
    return string;
}

NSString* MBIMWebServerFormatISO8601(NSDate *date)
{
    __block NSString *string = nil;
    dispatch_sync(_dateFormatterQueue, ^{
        string = [_dateFormatterISO8601 stringFromDate:date];
    });
    
    return string;
}

@implementation NSDate (MBIMWebServerFormat)

- (NSString *)RFC822StringValue
{
    return MBIMWebServerFormatRFC822(self);
}

- (NSString *)ISO8601StringValue
{
    return MBIMWebServerFormatISO8601(self);
}

@end

@implementation NSString (MBIMWebServerFormat)

- (NSDate *)RFC822Date
{
    return [_dateFormatterRFC822 dateFromString:self];
}

- (NSDate *)ISO8601Date
{
    return [_dateFormatterISO8601 dateFromString:self];
}

@end
