/*
 * Copyright 2022 Rive
 */

#include "mac_utils.hpp"

#ifdef RIVE_BUILD_FOR_APPLE

#if defined(RIVE_BUILD_FOR_IOS)
#include <CoreGraphics/CGImage.h>
#include <ImageIO/CGImageSource.h>
#endif

AutoCF<CGImageRef> rive::FlipCGImageInY(AutoCF<CGImageRef> image) {
    if (!image) {
        return nullptr;
    }

    auto w = CGImageGetWidth(image);
    auto h = CGImageGetHeight(image);
    AutoCF space = CGColorSpaceCreateDeviceRGB();
    auto info = kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast;
    AutoCF ctx = CGBitmapContextCreate(nullptr, w, h, 8, 0, space, info);
    CGContextConcatCTM(ctx, CGAffineTransformMake(1, 0, 0, -1, 0, h));
    CGContextDrawImage(ctx, CGRectMake(0, 0, w, h), image);
    return CGBitmapContextCreateImage(ctx);
}

AutoCF<CGImageRef> rive::DecodeToCGImage(rive::Span<const uint8_t> span) {
    AutoCF data = CFDataCreate(nullptr, span.data(), span.size());
    if (!data) {
        printf("CFDataCreate failed\n");
        return nullptr;
    }

    AutoCF source = CGImageSourceCreateWithData(data, nullptr);
    if (!source) {
        printf("CGImageSourceCreateWithData failed\n");
        return nullptr;
    }

    AutoCF image = CGImageSourceCreateImageAtIndex(source, 0, nullptr);
    if (!image) {
        printf("CGImageSourceCreateImageAtIndex failed\n");
    }
    return image;
}

#endif
