// ¿Puede hacer overflow un int al sumar metros? Lo que dice cada mapa, sin suposiciones.
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <limits>

#include "map_file.h"
#include "shortest_paths.h"

int main(int argc, char* argv[]) {
    std::cout << "int llega hasta " << std::numeric_limits<int>::max() << "\n";
    std::cout << "sizeof(HeapEntry): " << sizeof(HeapEntry) << "\n";
    for (int i = 1; i < argc; i++) {
        MapFile map = read_map_file(argv[i]);
        Graph graph = graph_of(map);
        Meters total = 0;
        int longest = 0;
        for (const MapEdge& edge : map.edges) {
            total += edge.meters;
            longest = std::max(longest, edge.meters);
        }
        // Dos pasadas: del nodo 0 al más lejano, y de ese al más lejano de él.
        int start = 0;
        Meters farthest = 0;
        for (int pass = 0; pass < 2; pass++) {
            DijkstraResult result = dijkstra(graph, start);
            farthest = 0;
            for (int v = 0; v < graph.node_count(); v++) {
                if (result.distance[v] > farthest) {
                    farthest = result.distance[v];
                    start = v;
                }
            }
        }
        std::cout << argv[i] << ": arista mas larga " << longest << ", suma de todas " << total
                  << ", ruta larga encontrada " << farthest << "\n";
    }
    return 0;
}
