//Renata Kopecna

#include <iostream>
#include <spdlog.h>
#include <helpers.hh>

void print_help(){
    spdlog::set_level(spdlog::level::debug);
    spdlog::set_pattern("%^[HELP]%$ %v");
    spdlog::debug( "//--------------------------------------------------------------------------\\\\" );
    spdlog::debug( "||  FCNC fitter to determine angular coefficients of B+ --> K*+ mu mu.      ||" );
    spdlog::debug( "\\\\--------------------------------------------------------------------------//" );
    spdlog::debug( " Please set the following options:" );
    spdlog::debug( "- - - - - - - - - - - - - - - - -" );
    spdlog::debug( "- - - - - - MANDATORY - - - - - -" );
    spdlog::debug( "- - - - - - - - - - - - - - - - -" );
    spdlog::debug( " -r <int>            : Select Run number" );
    spdlog::debug( "      0              : Optional, use when running per year." );
    spdlog::debug( "     1, 2            : Run only on Run 1 or 2" );
    spdlog::debug( "      12             : Run on both Runs." );

    spdlog::debug( "      21             : Run on 15+16." );
    spdlog::debug( "      22             : Run on 17+18." );
    spdlog::debug( " -y <int>            : Select year" );

    spdlog::debug( "- - - - - - - - - - - - - - - - -" );
    spdlog::debug( "- - - - - - OPTIONAL  - - - - - -" );
    spdlog::debug( "- - - - - - - - - - - - - - - - -" );
    spdlog::debug( " -a                  : Get angular resolution." );
    spdlog::debug( " -b                  : Run on a certain numbers of q2 bin." );
    spdlog::debug( " -c                  : Get angular corrections." );
    spdlog::debug( " -d <int>            : Set dataset");
    spdlog::debug( "      0              : Data");
    spdlog::debug( "      1              : Signal MC");
    spdlog::debug( "      2              : Ref MC");
    spdlog::debug( "      3              : PHSP");
    spdlog::debug( "      4              : Generator level MC");
    spdlog::debug( "      5              : Boosted generator level MC");
    spdlog::debug( " -e                  : Set number of events to be used." );
    spdlog::debug( " -f <int>            : Run a fit." );

    spdlog::debug( "      0              : Background only fit");
    spdlog::debug( "      1              : Complete fit");
    spdlog::debug( "      2              : Mass fit");
    spdlog::debug( "      3              : Method of moments");
    spdlog::debug( "      4              : MC fit");
    spdlog::debug( "      5              : Generator level fit");
    spdlog::debug( "      6              : ");
    spdlog::debug( " -g <int>            : Use folding of angles. Five possibilities use range [0-4]" );
    spdlog::debug( "                     : [0]: phi' = phi + pi   for phi < 0" );
    spdlog::debug( "                     : [1]: phi' = -phi       for phi < 0" );
    spdlog::debug( "                            phi' = pi - phi   for ctl < 0 " );
    spdlog::debug( "                            ctl' = -ctl       for ctl < 0 " );
    spdlog::debug( "                     : [2]: phi' = -phi       for phi < 0" );
    spdlog::debug( "                            ctl' = -ctl       for ctl < 0 " );
    spdlog::debug( "                     : [3]: phi' = pi - phi   for phi > pi/2" );
    spdlog::debug( "                            phi' = -pi - phi  for phi < -pi/2 " );
    spdlog::debug( "                            ctl' = -ctl       for ctl < 0 " );
    spdlog::debug( "                     : [4]: phi' = pi - phi   for phi > pi/2" );
    spdlog::debug( "                            phi' = -pi - phi  for phi < -pi/2 " );
    spdlog::debug( "                            ctk' = -ctk       for ctk < 0 " );
    spdlog::debug( "                            ctl' = -ctl       for ctl < 0 " );
    spdlog::debug( " -h                  : Print this help :)" );

    spdlog::debug( " -i                  : index. " ); //TODO
    spdlog::debug( "                       in combination with angCorr, it scans the corrections. " );
    spdlog::debug( "                       in combination with -f 4, it sets the polarity: 1 is up, 2 is down. " );

    spdlog::debug( " -j                  : job index. Usage to be added" ); //TODO
    spdlog::debug( " -k                  : Converting events. Needs specification of a year/run and dataset." );
    spdlog::debug( " -l                  : Likelihood profile scans." );
    spdlog::debug( " -m                  : Getting pulls from MC" );
    spdlog::debug( " -n                  : Set number of toys." );
    spdlog::debug( " -o                  : Run feldman cousins." );
    spdlog::debug( " -p                  : Use P' instead of S-observables." );
    spdlog::debug( " -q                  : Use Jpsi Q2 region" );

    spdlog::debug( " -t                  : Get pulls fro toys." );
    spdlog::debug( " -u                  : Set number q2 bins to be used." );
    spdlog::debug( " -v  <int>           : Set verbosity levels. Default is info." );
    spdlog::debug( "      0              : Trace" );
    spdlog::debug( "      1              : Debug" );
    spdlog::debug( "      2              : Info" );
    spdlog::debug( "      3              : Warn" );
    spdlog::debug( "      4              : Error" );
    spdlog::debug( "      5              : Critical" );

    spdlog::debug( " -w                  : Does nothing for now." );
    spdlog::debug( " -x                  : Runs whatever script you decide from Scripts/. This is due to ROOT trying to compile everything when it really doesn't need to and running it standalone would be a pain in the ass." );

    spdlog::debug( " -z                  : Testing flag." );

    spdlog::debug( "- - - - - - - - - - - - - - - - -" );
    spdlog::debug( "- - - - - - SYSTEMATICS - - - - -" );
    spdlog::debug( "- - - - - - - - - - - - - - - - -" );
    spdlog::debug( " -s <int>            : Run systematic study number #ID" );
    spdlog::debug( "      1              : Bootstrapping of PHSP MC" );
    spdlog::debug( "      2              : Perform fit with non-symmetric acceptance in ctl" );
    spdlog::debug( "      3              : Increase Legendre poly order by 2 for PHSP MC" );
    spdlog::debug( "      4              : Randomly change PHSP MC reweighting wihtin it's uncertainties" );
    spdlog::debug( "      5              : Check non-homogeneous FS distributions in q2" );
    spdlog::debug( "      6              : Vary angles (ctk, ctl and phi) within the angular resoluation" );
    spdlog::debug( "      7              : Generate toy events with double-gaussian profile and fit with CB" );
    spdlog::debug( "      8              : Systematic study on angular background model, add 10\% contribution of higher order" );
    spdlog::debug( "      9              : Investigate systematic effects due to trigger selection" );
    spdlog::debug( "     10              : Reweight PHSP MC according to pion PT disagreement in DD" );
    spdlog::debug( "     11              : Background systematic for mimicing the B0 -> KS mu mu veto" );
    reset_spdlog(); // back to default format

}

void print_errorCodes(){

    spdlog::set_level(spdlog::level::err);
    spdlog::set_pattern("%^[HELP]%$ %v");
    spdlog::error( "//-----------------------------\\\\");
    spdlog::error( "||   Possible error codes:     ||");
    spdlog::error( "\\\\-----------------------------//");

    spdlog::error( " 0            : Everything is okay!" );
    spdlog::error( " 1            : Something is wrong with (parsing) the input options!" );
    spdlog::error( " 2            : Something is wrong with addition options in the fitter!" );
    spdlog::error( " 3            : Wrong tree/parameter name!" );
    spdlog::error( " 4            : Wrong array/vector lenght!" );
    spdlog::error( " 5            : Missing implementation" );
    spdlog::error( " 404          : Something is not found!" );
    reset_spdlog(); // back to default format
}
