#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, "r");

	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
