#ifdef TESTING
#else

#include "font.h"
#include "font_arguments.hpp"
#include "include/core/SkData.h"
#include "include/core/SkFontMgr.h"
#include "include/core/SkStream.h"
#include "include/core/SkTypeface.h"
#include <vector>

static std::vector<char> readFile(const char path[]) {
    FILE* fp = fopen(path, "rb");

    if (fp == nullptr) {
        fclose(fp);
        std::ostringstream errorStream;
        errorStream << "Failed to open file " << path;
        throw std::invalid_argument(errorStream.str());
    }
    fseek(fp, 0, SEEK_END);
    size_t length = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    std::vector<char> data;
    data.resize(length);

    if (fread(data.data(), 1, length, fp) != length) {
        fclose(fp);
        std::ostringstream errorStream;
        errorStream << "Failed to read file into bytes array " << path;
        throw std::invalid_argument(errorStream.str());
    }

    fclose(fp);
    return data;
}

static void writeFile(const char path[], const void* bytes, size_t length) {
    FILE* pFile = fopen(path, "wb");
    fwrite(bytes, sizeof(char), length, pFile);
    fclose(pFile);
}

static std::vector<char> build_default_charset() {
    std::vector<char> charset;
    for (int i = 32; i < 127; ++i) {
        charset.push_back(i);
    }
    return charset;
}

int main(int argc, const char* argv[]) {
    try {
        FontArguments args(argc, argv);
        sk_sp<SkTypeface> typeface;

        auto src = readFile(args.source().c_str());
        auto srcData = SkData::MakeWithCopy(src.data(), src.size());
        typeface = SkTypeface::MakeFromData(srcData);
        if (!typeface) {
            fprintf(stderr, "Failed to convert file to SkTypeface\n");
            return 1;
        }

        std::vector<char> charset;
        auto charsetFile = args.charset();
        if (charsetFile.size() > 0) {
            charset = readFile(args.charset().c_str());
        } else {
            charset = build_default_charset();
        }

        RiveFont font;
        font.load(typeface, charset.data(), charset.size());

        auto dst = font.encode();

        writeFile(args.destination().c_str(), dst->data(), dst->size());
    } catch (const args::Completion& e) {
        return 0;
    } catch (const args::Help&) {
        return 0;
    } catch (const args::ParseError& e) {
        return 1;
    } catch (args::ValidationError e) {
        return 1;
    }

    return 0;
}

#endif
