#include "Spect.h"
#include "InterFunc.h"
#include <vector>
#include <iostream>
#include <string>
#include <cstdlib>

void dump_list () 
{
    vector<int> id, type;
    vector<double> baseline, angle;
    Spect::GetAvailable("localhost","bviren",0,id,type,baseline,angle);

    for (unsigned int i=0; i < id.size(); ++i) 
        cout << id[i] << ") " 
             << type[i] << " "
             << baseline[i] << " "
             << angle[i] << endl;
}

void dump_by_id(int id)
{
    Spect spect_db;
    if (! spect_db.LoadDataDB(id)) {
        cerr << "Failed to load spectrum #" << id << endl;
        exit (1);
    }
    InterFunc& spect = *spect_db.CreateFunc();
    for (double e=100e6; e<=10e9; e+=10e6) {
        cout << e << " " << spect(e) << endl;
        if (spect(e) < 0) {
            cerr << "negative flux at e=" << e << ", " << spect(e) << endl;
        }
    }
    delete &spect;
}

int main (int argc, char *argv[])
{
    if (argc == 1) {
        dump_list();
        return 0;
    }

    int id = atoi(argv[1]);
    dump_by_id(id);

    return 0;
} // end of main()
