#include <filesystem>
#include <iostream>
#include <vector>

#include "bounding_box.h"
#include "pack.h"
#include "png.h"

namespace fs = std::filesystem;

int main(int argc, const char* argv[]) {
    // We take an image path and a list of points (grouped by 4 to define
    // bounding boxes).
    if (argc < 6 or (argc - 2) % 4 != 0) {
        std::cerr
            << "Usage: " << argv[0] << " path/to/image"
            << " [x y width height ...]\n"
            << "x/y/w/h points must be grouped by 4 to define bounding boxes\n";
        return 1;
    }

    const fs::path input(argv[1]);
    if (!fs::exists(input)) {
        std::cerr << "Input file " << input << " does not exist.\n";
        return 1;
    }

    const std::optional<Frame> in_frame = load_png(input);
    if (!in_frame) {
        std::cerr << "Cannot load file " << input << "\n";
        return 1;
    }

    int i = 2;
    std::vector<freling::BoundingBox> bboxes;
    bboxes.reserve((argc - 2) / 4);
    while (i < argc) {
        const int32_t x = atoi(argv[i]);
        const int32_t y = atoi(argv[i + 1]);
        const uint32_t w = atoi(argv[i + 2]);
        const uint32_t h = atoi(argv[i + 3]);
        bboxes.push_back(freling::BoundingBox({x, y, w, h}));
        i += 4;
    }

    std::vector<freling::BoundingBox> packed_bboxes;
    std::optional<Frame> regions = pack(*in_frame, bboxes, packed_bboxes);

    return 0;
}
