// =============================================================== //
//                                                                 //
//   File      : AP_pos_var_pars.cxx                               //
//   Purpose   : window interface for PVP calculation              //
//                                                                 //
//   Institute of Microbiology (Technical University Munich)       //
//   http://www.arb-home.de/                                       //
//                                                                 //
// =============================================================== //

#include "NT_local.h"

#include <pvp.h>
#include <TreeNode.h>

#include <sel_boxes.hxx>
#include <TreeAwars.hxx>

#include <aw_root.hxx>
#include <aw_awar.hxx>
#include <aw_msg.hxx>

#include <arb_progress.h>
#include <arb_global_defs.h>

#define AWAR_PVP_SAI  "tmp/pos_var_pars/sai"
#define AWAR_PVP_TREE "tmp/pos_var_pars/tree"

static void AP_calc_pos_var_pars(AW_window *aww) {
    GB_ERROR  error;
    char     *ali_name = GBT_get_default_alignment(GLOBAL.gb_main);

    if (!ali_name) {
        error = GB_await_error();
    }
    else {
        AW_root    *root      = aww->get_root();
        const char *tree_name = root->awar(AWAR_PVP_TREE)->read_char_pntr();
        const char *sai_name  = root->awar(AWAR_PVP_SAI)->read_char_pntr();

        error = PVP_calculate(GLOBAL.gb_main, ali_name, tree_name, sai_name);

        free(ali_name);
    }
    aw_message_if(error);
}

AW_window *AP_create_pos_var_pars_window(AW_root *root) {
    GB_transaction ta(GLOBAL.gb_main);

    AW_window_simple *aws = new AW_window_simple;
    aws->init(root, "CSP_BY_PARSIMONY", "Conservation Profile: Parsimony Method");
    aws->load_xfig("cpro/parsimony.fig");

    root->awar_string(AWAR_PVP_SAI, "POS_VAR_BY_PARSIMONY", AW_ROOT_DEFAULT);
    const char *largest_tree = GBT_name_of_largest_tree(GLOBAL.gb_main);

    AW_awar *tree_awar = root->awar_string(AWAR_PVP_TREE, NO_TREE_SELECTED, AW_ROOT_DEFAULT);
    AWT_registerTreeAwarSimple(tree_awar);

    root->awar(AWAR_PVP_TREE)->write_string(largest_tree);

    aws->at("close");
    aws->callback(AW_POPDOWN);
    aws->create_button("CLOSE", "CLOSE", "C");

    aws->at("help"); aws->callback(makeHelpCallback("pos_var_pars.hlp"));
    aws->create_button("HELP", "HELP", "H");

    aws->at("name");
    aws->create_input_field(AWAR_PVP_SAI);

    aws->at("box");
    awt_create_SAI_selection_list(GLOBAL.gb_main, aws, AWAR_PVP_SAI);

    aws->at("trees");
    awt_create_TREE_selection_list(GLOBAL.gb_main, aws, AWAR_PVP_TREE);

    aws->at("go");
    aws->highlight();
    aws->callback(AP_calc_pos_var_pars);
    aws->create_button("GO", "GO");

    return aws;
}
