#include "minmax.h"
#include <fstream>

minmax::minmax() {
}

minmax::~minmax() {
}

double minmax::effortMax(project x) {

    project s=x;

    double maxEff=0;

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=14) || i==23 || i==35 || (i>=37 && i<=39))
                s.setattnum(i, s.attrangeNorm[1][i]);
            else
                s.setattnum(i, s.attrangeNorm[0][i]);
        }
    }

    s.B = s.attrangeNorm[1][38];

    maxEff = s.effort();

    return maxEff + 0.0000000000000001;
}

double minmax::effortMin(project x) {

    project s=x;

    double minEff=0;

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=14) || i==23 || i==34 || i==36 || (i>=37 && i<=39))
                s.setattnum(i, s.attrangeNorm[0][i]);
            else
                s.setattnum(i, s.attrangeNorm[1][i]);
        }
    }

    s.B = s.attrangeNorm[0][38];

    minEff = s.effort();

    return minEff;
}



/////////////////////////////////////////////////////////////////////////////
// min max functions for monthsmodel
/////////////////////////////////////////////////////////////////////////////

double minmax::monthsMax(project x) {

    project s=x;

    double maxMonths=0;

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=14) || i==23 || i==35 || (i>=37 && i<=41))
                s.setattnum(i, s.attrangeNorm[1][i]);
            else
                s.setattnum(i, s.attrangeNorm[0][i]);
        }
    }

    s.B = s.attrangeNorm[1][38];

    maxMonths = s.months();

    return maxMonths + 0.0000000000000001;
}


double minmax::monthsMin(project x) {

    project s=x;

    double minMonths=0;

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=14) || i==23 || i==34 || i==36 || (i>=37 && i<=41))
                s.setattnum(i, s.attrangeNorm[0][i]);
            else
                s.setattnum(i, s.attrangeNorm[1][i]);
        }
    }

    s.B = s.attrangeNorm[0][38];

    minMonths = s.months();

    return minMonths;
}


double minmax::defectMax(project x) {

    project s=x;

    double maxDef=0;

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=12) || i==23 || i==25 || i==27 || i==28 || i==30 || i==31 || i==33 || i==39)
                s.setattnum(i, s.attrangeNorm[1][i]);
            else
                s.setattnum(i, s.attrangeNorm[0][i]);
        }
    }

    maxDef = s.defects();

    return maxDef + 0.0000000000000001;
}

double minmax::defectMin(project x) {

    project s=x;

    double minDef=0;

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=12) || i==23 || i==26 || i==29 || i==32 || i==39)
                s.setattnum(i, s.attrangeNorm[0][i]);
            else
                s.setattnum(i, s.attrangeNorm[1][i]);
        }
    }

    minDef = s.defects();

    return minDef;
}

double minmax::thrMax(project x) {

    project s=x;

    for (int i=0;i<5;i++) {
        for (int j=0;j<5;j++) {
            s.t1[i][j]*=1.5;
            s.t3[i][j]*=1.5;
            s.t4[i][j]*=1.5;
            s.t5[i][j]*=1.5;
            s.t7[i][j]*=1.5;
        }
    }

    for (int i=0;i<5;i++) {
        for (int j=0;j<6;j++) {
            s.t2[i][j]*=1.5;
        }
    }

    for (int i=0;i<6;i++) {
        for (int j=0;j<5;j++) {
            s.t6[i][j]*=1.5;
            s.t8[i][j]*=1.5;
        }
    }

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=14) || i==23 || i==35)
                s.setattnum(i, s.attrangeNorm[1][i]);
            else
                s.setattnum(i, s.attrangeNorm[0][i]);
        }
    }

//	double test1 = s.sched_threat();
//	double test2 = s.prod_threat();
//	double test3 = s.pers_threat();
//	double test4 = s.proc_threat();
//	double test5 = s.plat_threat();
//	double test6 = s.reuse_threat();

    double TH = s.threat();

    return TH;
}

double minmax::thrMin(project x) {

    project s=x;

    for (int i=0;i<5;i++) {
        for (int j=0;j<5;j++) {
            s.t1[i][j]*=0.5;
            s.t3[i][j]*=0.5;
            s.t4[i][j]*=0.5;
            s.t5[i][j]*=0.5;
            s.t7[i][j]*=0.5;
        }
    }

    for (int i=0;i<5;i++) {
        for (int j=0;j<6;j++) {
            s.t2[i][j]*=0.5;
        }
    }

    for (int i=0;i<6;i++) {
        for (int j=0;j<5;j++) {
            s.t6[i][j]*=0.5;
            s.t8[i][j]*=0.5;
        }
    }

    for (int i=0; i<x.ATTN; i++) {
        if (s.attributes[i]==0) {
            if((i>=8 && i<=14) || i==23 || i==34 || i==36)
                s.setattnum(i, s.attrangeNorm[0][i]);
            else
                s.setattnum(i, s.attrangeNorm[1][i]);
        }
    }

    double TH = s.threat();

    return TH;

}
