#include <math.h>
#include <iostream>
#include <conio.h>
#include <vector>
#include "histogram.h"
#include "histogram_internal.h"
using namespace std;

bool
find_minmax(vector<double> numbers, double &min, double &max) {

    bool notEmpty = true;
    if (numbers.size() == 0 || numbers.size() == 1)
        notEmpty = false;
    else{
        min = numbers[0];
        max = numbers[0];
        for (size_t i = 1; i < numbers.size(); i++) {
            if (min > numbers[i])
                min = numbers[i];
            if (max < numbers[i])
                max = numbers[i];
        }
    }
    return notEmpty;
}

vector <size_t> make_histogramm(vector<double>numbers, size_t bin_count){
    double min, max;
    bool haveElements = find_minmax(numbers, min, max);
    if (haveElements){
        double binSize = (max - min) / bin_count;
        vector<size_t> bins(bin_count);
        for (size_t i = 0; i < numbers.size(); i++) {
            bool found = false;
            for (size_t j = 0; (j <= bin_count - 1) && !found; j++) {
                auto lo = min + j * binSize;
                auto hi = min + (j + 1) * binSize;
                if ((numbers[i] >= lo) && (numbers[i] < hi)) {
                    bins[j]++;
                    found = true;
                }
            }
            if (!found)
                bins[bin_count - 1]++;
        }
        return bins;
    }
    else
        cerr << "Empty massive of numbers";
    }