#include "vtr_assert.h"
#include "vtr_log.h"
#include "vtr_memory.h"

#include "vpr_types.h"
#include "vpr_error.h"

#include "globals.h"
#include "echo_files.h"
#include "read_options.h"
#include "read_xml_arch_file.h"
#include "ShowSetup.h"

/******** Function Prototypes ********/
static void ShowPackerOpts(const t_packer_opts& PackerOpts);
static void ShowNetlistOpts(const t_netlist_opts& NetlistOpts);
static void ShowPlacerOpts(const t_placer_opts& PlacerOpts,
                           const t_annealing_sched& AnnealSched);
static void ShowRouterOpts(const t_router_opts& RouterOpts);
static void ShowAnalysisOpts(const t_analysis_opts& AnalysisOpts);

static void ShowAnnealSched(const t_annealing_sched& AnnealSched);
static void ShowRoutingArch(const t_det_routing_arch& RoutingArch);

/******** Function Implementations ********/

void ShowSetup(const t_vpr_setup& vpr_setup) {
    VTR_LOG("Timing analysis: %s\n", (vpr_setup.TimingEnabled ? "ON" : "OFF"));

    VTR_LOG("Circuit netlist file: %s\n", vpr_setup.FileNameOpts.NetFile.c_str());
    VTR_LOG("Circuit placement file: %s\n", vpr_setup.FileNameOpts.PlaceFile.c_str());
    VTR_LOG("Circuit routing file: %s\n", vpr_setup.FileNameOpts.RouteFile.c_str());
    VTR_LOG("Circuit SDC file: %s\n", vpr_setup.Timing.SDCFile.c_str());
    VTR_LOG("\n");

    VTR_LOG("Packer: %s\n", (vpr_setup.PackerOpts.doPacking ? "ENABLED" : "DISABLED"));
    VTR_LOG("Placer: %s\n", (vpr_setup.PlacerOpts.doPlacement ? "ENABLED" : "DISABLED"));
    VTR_LOG("Router: %s\n", (vpr_setup.RouterOpts.doRouting ? "ENABLED" : "DISABLED"));
    VTR_LOG("Analysis: %s\n", (vpr_setup.AnalysisOpts.doAnalysis ? "ENABLED" : "DISABLED"));
    VTR_LOG("\n");

    ShowNetlistOpts(vpr_setup.NetlistOpts);

    if (vpr_setup.PackerOpts.doPacking) {
        ShowPackerOpts(vpr_setup.PackerOpts);
    }
    if (vpr_setup.PlacerOpts.doPlacement) {
        ShowPlacerOpts(vpr_setup.PlacerOpts, vpr_setup.AnnealSched);
    }
    if (vpr_setup.RouterOpts.doRouting) {
        ShowRouterOpts(vpr_setup.RouterOpts);
    }
    if (vpr_setup.AnalysisOpts.doAnalysis) {
        ShowAnalysisOpts(vpr_setup.AnalysisOpts);
    }

    if (DETAILED == vpr_setup.RouterOpts.route_type)
        ShowRoutingArch(vpr_setup.RoutingArch);
}

void printClusteredNetlistStats() {
    int i, j, L_num_p_inputs, L_num_p_outputs;
    int* num_blocks_type;

    auto& device_ctx = g_vpr_ctx.device();
    auto& cluster_ctx = g_vpr_ctx.clustering();

    num_blocks_type = (int*)vtr::calloc(device_ctx.num_block_types, sizeof(int));

    VTR_LOG("\n");
    VTR_LOG("Netlist num_nets: %d\n", (int)cluster_ctx.clb_nlist.nets().size());
    VTR_LOG("Netlist num_blocks: %d\n", (int)cluster_ctx.clb_nlist.blocks().size());

    for (i = 0; i < device_ctx.num_block_types; i++) {
        num_blocks_type[i] = 0;
    }
    /* Count I/O input and output pads */
    L_num_p_inputs = 0;
    L_num_p_outputs = 0;

    for (auto blk_id : cluster_ctx.clb_nlist.blocks()) {
        num_blocks_type[cluster_ctx.clb_nlist.block_type(blk_id)->index]++;
        auto type = cluster_ctx.clb_nlist.block_type(blk_id);
        if (is_io_type(type)) {
            for (j = 0; j < type->num_pins; j++) {
                if (cluster_ctx.clb_nlist.block_net(blk_id, j) != ClusterNetId::INVALID()) {
                    if (type->class_inf[type->pin_class[j]].type == DRIVER) {
                        L_num_p_inputs++;
                    } else {
                        VTR_ASSERT(type->class_inf[type->pin_class[j]].type == RECEIVER);
                        L_num_p_outputs++;
                    }
                }
            }
        }
    }

    for (i = 0; i < device_ctx.num_block_types; i++) {
        VTR_LOG("Netlist %s blocks: %d.\n", device_ctx.block_types[i].name, num_blocks_type[i]);
    }

    /* Print out each block separately instead */
    VTR_LOG("Netlist inputs pins: %d\n", L_num_p_inputs);
    VTR_LOG("Netlist output pins: %d\n", L_num_p_outputs);
    VTR_LOG("\n");
    free(num_blocks_type);
}

static void ShowRoutingArch(const t_det_routing_arch& RoutingArch) {
    VTR_LOG("RoutingArch.directionality: ");
    switch (RoutingArch.directionality) {
        case BI_DIRECTIONAL:
            VTR_LOG("BI_DIRECTIONAL\n");
            break;
        case UNI_DIRECTIONAL:
            VTR_LOG("UNI_DIRECTIONAL\n");
            break;
        default:
            vpr_throw(VPR_ERROR_UNKNOWN, __FILE__, __LINE__, "<Unknown>\n");
            break;
    }

    VTR_LOG("RoutingArch.switch_block_type: ");
    switch (RoutingArch.switch_block_type) {
        case SUBSET:
            VTR_LOG("SUBSET\n");
            break;
        case WILTON:
            VTR_LOG("WILTON\n");
            break;
        case UNIVERSAL:
            VTR_LOG("UNIVERSAL\n");
            break;
        case FULL:
            VTR_LOG("FULL\n");
            break;
        case CUSTOM:
            VTR_LOG("CUSTOM\n");
            break;
        default:
            VTR_LOG_ERROR("switch block type\n");
    }

    VTR_LOG("RoutingArch.Fs: %d\n", RoutingArch.Fs);

    VTR_LOG("\n");
}

static void ShowAnnealSched(const t_annealing_sched& AnnealSched) {
    VTR_LOG("AnnealSched.type: ");
    switch (AnnealSched.type) {
        case AUTO_SCHED:
            VTR_LOG("AUTO_SCHED\n");
            break;
        case USER_SCHED:
            VTR_LOG("USER_SCHED\n");
            break;
        default:
            VTR_LOG_ERROR("Unknown annealing schedule\n");
    }

    VTR_LOG("AnnealSched.inner_num: %f\n", AnnealSched.inner_num);

    if (USER_SCHED == AnnealSched.type) {
        VTR_LOG("AnnealSched.init_t: %f\n", AnnealSched.init_t);
        VTR_LOG("AnnealSched.alpha_t: %f\n", AnnealSched.alpha_t);
        VTR_LOG("AnnealSched.exit_t: %f\n", AnnealSched.exit_t);
    }
}

static void ShowRouterOpts(const t_router_opts& RouterOpts) {
    VTR_LOG("RouterOpts.route_type: ");
    switch (RouterOpts.route_type) {
        case GLOBAL:
            VTR_LOG("GLOBAL\n");
            break;
        case DETAILED:
            VTR_LOG("DETAILED\n");
            break;
        default:
            VTR_LOG_ERROR("Unknown router opt\n");
    }

    if (DETAILED == RouterOpts.route_type) {
        VTR_LOG("RouterOpts.router_algorithm: ");
        switch (RouterOpts.router_algorithm) {
            case BREADTH_FIRST:
                VTR_LOG("BREADTH_FIRST\n");
                break;
            case TIMING_DRIVEN:
                VTR_LOG("TIMING_DRIVEN\n");
                break;
            case NO_TIMING:
                VTR_LOG("NO_TIMING\n");
                break;
            default:
                vpr_throw(VPR_ERROR_UNKNOWN, __FILE__, __LINE__, "<Unknown>\n");
        }

        VTR_LOG("RouterOpts.base_cost_type: ");
        switch (RouterOpts.base_cost_type) {
            case DELAY_NORMALIZED:
                VTR_LOG("DELAY_NORMALIZED\n");
                break;
            case DELAY_NORMALIZED_LENGTH:
                VTR_LOG("DELAY_NORMALIZED_LENGTH\n");
                break;
            case DELAY_NORMALIZED_FREQUENCY:
                VTR_LOG("DELAY_NORMALIZED_FREQUENCY\n");
                break;
            case DELAY_NORMALIZED_LENGTH_FREQUENCY:
                VTR_LOG("DELAY_NORMALIZED_LENGTH_FREQUENCY\n");
                break;
            case DEMAND_ONLY:
                VTR_LOG("DEMAND_ONLY\n");
                break;
            default:
                vpr_throw(VPR_ERROR_UNKNOWN, __FILE__, __LINE__, "Unknown base_cost_type\n");
        }

        VTR_LOG("RouterOpts.fixed_channel_width: ");
        if (NO_FIXED_CHANNEL_WIDTH == RouterOpts.fixed_channel_width) {
            VTR_LOG("NO_FIXED_CHANNEL_WIDTH\n");
        } else {
            VTR_LOG("%d\n", RouterOpts.fixed_channel_width);
        }

        VTR_LOG("RouterOpts.trim_empty_chan: %s\n", (RouterOpts.trim_empty_channels ? "true" : "false"));
        VTR_LOG("RouterOpts.trim_obs_chan: %s\n", (RouterOpts.trim_obs_channels ? "true" : "false"));
        VTR_LOG("RouterOpts.acc_fac: %f\n", RouterOpts.acc_fac);
        VTR_LOG("RouterOpts.bb_factor: %d\n", RouterOpts.bb_factor);
        VTR_LOG("RouterOpts.bend_cost: %f\n", RouterOpts.bend_cost);
        VTR_LOG("RouterOpts.first_iter_pres_fac: %f\n", RouterOpts.first_iter_pres_fac);
        VTR_LOG("RouterOpts.initial_pres_fac: %f\n", RouterOpts.initial_pres_fac);
        VTR_LOG("RouterOpts.pres_fac_mult: %f\n", RouterOpts.pres_fac_mult);
        VTR_LOG("RouterOpts.max_router_iterations: %d\n", RouterOpts.max_router_iterations);
        VTR_LOG("RouterOpts.min_incremental_reroute_fanout: %d\n", RouterOpts.min_incremental_reroute_fanout);

        if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
            VTR_LOG("RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
            VTR_LOG("RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
            VTR_LOG("RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
        }
        if (RouterOpts.routing_failure_predictor == SAFE)
            VTR_LOG("RouterOpts.routing_failure_predictor = SAFE\n");
        else if (RouterOpts.routing_failure_predictor == AGGRESSIVE)
            VTR_LOG("RouterOpts.routing_failure_predictor = AGGRESSIVE\n");
        else if (RouterOpts.routing_failure_predictor == OFF)
            VTR_LOG("RouterOpts.routing_failure_predictor = OFF\n");

        if (RouterOpts.routing_budgets_algorithm == DISABLE) {
            VTR_LOG("RouterOpts.routing_budgets_algorithm = DISABLE\n");
        } else if (RouterOpts.routing_budgets_algorithm == MINIMAX) {
            VTR_LOG("RouterOpts.routing_budgets_algorithm = MINIMAX\n");
        } else if (RouterOpts.routing_budgets_algorithm == YOYO) {
            VTR_LOG("RouterOpts.routing_budgets_algorithm = YOYO\n");
        } else if (RouterOpts.routing_budgets_algorithm == SCALE_DELAY) {
            VTR_LOG("RouterOpts.routing_budgets_algorithm = SCALE_DELAY\n");
        }

    } else {
        VTR_ASSERT(GLOBAL == RouterOpts.route_type);

        VTR_LOG("RouterOpts.router_algorithm: ");
        switch (RouterOpts.router_algorithm) {
            case BREADTH_FIRST:
                VTR_LOG("BREADTH_FIRST\n");
                break;
            case TIMING_DRIVEN:
                VTR_LOG("TIMING_DRIVEN\n");
                break;
            case NO_TIMING:
                VTR_LOG("NO_TIMING\n");
                break;
            default:
                VTR_LOG_ERROR("Unknown router algorithm\n");
        }

        VTR_LOG("RouterOpts.base_cost_type: ");
        switch (RouterOpts.base_cost_type) {
            case DELAY_NORMALIZED:
                VTR_LOG("DELAY_NORMALIZED\n");
                break;
            case DEMAND_ONLY:
                VTR_LOG("DEMAND_ONLY\n");
                break;
            default:
                VTR_LOG_ERROR("Unknown router base cost type\n");
        }

        VTR_LOG("RouterOpts.fixed_channel_width: ");
        if (NO_FIXED_CHANNEL_WIDTH == RouterOpts.fixed_channel_width) {
            VTR_LOG("NO_FIXED_CHANNEL_WIDTH\n");
        } else {
            VTR_LOG("%d\n", RouterOpts.fixed_channel_width);
        }

        VTR_LOG("RouterOpts.trim_empty_chan: %s\n", (RouterOpts.trim_empty_channels ? "true" : "false"));
        VTR_LOG("RouterOpts.trim_obs_chan: %s\n", (RouterOpts.trim_obs_channels ? "true" : "false"));
        VTR_LOG("RouterOpts.acc_fac: %f\n", RouterOpts.acc_fac);
        VTR_LOG("RouterOpts.bb_factor: %d\n", RouterOpts.bb_factor);
        VTR_LOG("RouterOpts.bend_cost: %f\n", RouterOpts.bend_cost);
        VTR_LOG("RouterOpts.first_iter_pres_fac: %f\n", RouterOpts.first_iter_pres_fac);
        VTR_LOG("RouterOpts.initial_pres_fac: %f\n", RouterOpts.initial_pres_fac);
        VTR_LOG("RouterOpts.pres_fac_mult: %f\n", RouterOpts.pres_fac_mult);
        VTR_LOG("RouterOpts.max_router_iterations: %d\n", RouterOpts.max_router_iterations);
        VTR_LOG("RouterOpts.min_incremental_reroute_fanout: %d\n", RouterOpts.min_incremental_reroute_fanout);
        if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
            VTR_LOG("RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
            VTR_LOG("RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
            VTR_LOG("RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
        }
    }
    VTR_LOG("\n");
}

static void ShowPlacerOpts(const t_placer_opts& PlacerOpts,
                           const t_annealing_sched& AnnealSched) {
    VTR_LOG("PlacerOpts.place_freq: ");
    switch (PlacerOpts.place_freq) {
        case PLACE_ONCE:
            VTR_LOG("PLACE_ONCE\n");
            break;
        case PLACE_ALWAYS:
            VTR_LOG("PLACE_ALWAYS\n");
            break;
        case PLACE_NEVER:
            VTR_LOG("PLACE_NEVER\n");
            break;
        default:
            VTR_LOG_ERROR("Unknown Place Freq\n");
    }
    if ((PLACE_ONCE == PlacerOpts.place_freq)
        || (PLACE_ALWAYS == PlacerOpts.place_freq)) {
        VTR_LOG("PlacerOpts.place_algorithm: ");
        switch (PlacerOpts.place_algorithm) {
            case BOUNDING_BOX_PLACE:
                VTR_LOG("BOUNDING_BOX_PLACE\n");
                break;
            case PATH_TIMING_DRIVEN_PLACE:
                VTR_LOG("PATH_TIMING_DRIVEN_PLACE\n");
                break;
            default:
                VTR_LOG_ERROR("Unknown placement algorithm\n");
        }

        VTR_LOG("PlacerOpts.pad_loc_type: ");
        switch (PlacerOpts.pad_loc_type) {
            case FREE:
                VTR_LOG("FREE\n");
                break;
            case RANDOM:
                VTR_LOG("RANDOM\n");
                break;
            case USER:
                VTR_LOG("USER '%s'\n", PlacerOpts.pad_loc_file.c_str());
                break;
            default:
                vpr_throw(VPR_ERROR_UNKNOWN, __FILE__, __LINE__, "Unknown I/O pad location type\n");
        }

        VTR_LOG("PlacerOpts.place_cost_exp: %f\n", PlacerOpts.place_cost_exp);

        VTR_LOG("PlacerOpts.place_chan_width: %d\n", PlacerOpts.place_chan_width);

        if (PATH_TIMING_DRIVEN_PLACE == PlacerOpts.place_algorithm) {
            VTR_LOG("PlacerOpts.inner_loop_recompute_divider: %d\n", PlacerOpts.inner_loop_recompute_divider);
            VTR_LOG("PlacerOpts.recompute_crit_iter: %d\n", PlacerOpts.recompute_crit_iter);
            VTR_LOG("PlacerOpts.timing_tradeoff: %f\n", PlacerOpts.timing_tradeoff);
            VTR_LOG("PlacerOpts.td_place_exp_first: %f\n", PlacerOpts.td_place_exp_first);
            VTR_LOG("PlacerOpts.td_place_exp_last: %f\n", PlacerOpts.td_place_exp_last);
        }

        VTR_LOG("PlaceOpts.seed: %d\n", PlacerOpts.seed);

        ShowAnnealSched(AnnealSched);
    }
    VTR_LOG("\n");
}

static void ShowNetlistOpts(const t_netlist_opts& NetlistOpts) {
    VTR_LOG("NetlistOpts.abosrb_buffer_luts            : %s\n", (NetlistOpts.absorb_buffer_luts) ? "true" : "false");
    VTR_LOG("NetlistOpts.sweep_dangling_primary_ios    : %s\n", (NetlistOpts.sweep_dangling_primary_ios) ? "true" : "false");
    VTR_LOG("NetlistOpts.sweep_dangling_nets           : %s\n", (NetlistOpts.sweep_dangling_nets) ? "true" : "false");
    VTR_LOG("NetlistOpts.sweep_dangling_blocks         : %s\n", (NetlistOpts.sweep_dangling_blocks) ? "true" : "false");
    VTR_LOG("NetlistOpts.sweep_constant_primary_outputs: %s\n", (NetlistOpts.sweep_constant_primary_outputs) ? "true" : "false");
    VTR_LOG("\n");
}

static void ShowAnalysisOpts(const t_analysis_opts& AnalysisOpts) {
    VTR_LOG("AnalysisOpts.gen_post_synthesis_netlist: %s\n", (AnalysisOpts.gen_post_synthesis_netlist) ? "true" : "false");
    VTR_LOG("\n");
}

static void ShowPackerOpts(const t_packer_opts& PackerOpts) {
    VTR_LOG("PackerOpts.allow_unrelated_clustering: ");
    if (PackerOpts.allow_unrelated_clustering == e_unrelated_clustering::ON) {
        VTR_LOG("true\n");
    } else if (PackerOpts.allow_unrelated_clustering == e_unrelated_clustering::OFF) {
        VTR_LOG("false\n");
    } else if (PackerOpts.allow_unrelated_clustering == e_unrelated_clustering::AUTO) {
        VTR_LOG("auto\n");
    } else {
        vpr_throw(VPR_ERROR_UNKNOWN, __FILE__, __LINE__, "Unknown packer allow_unrelated_clustering\n");
    }
    VTR_LOG("PackerOpts.alpha_clustering: %f\n", PackerOpts.alpha);
    VTR_LOG("PackerOpts.beta_clustering: %f\n", PackerOpts.beta);
    VTR_LOG("PackerOpts.cluster_seed_type: ");
    switch (PackerOpts.cluster_seed_type) {
        case e_cluster_seed::TIMING:
            VTR_LOG("TIMING\n");
            break;
        case e_cluster_seed::MAX_INPUTS:
            VTR_LOG("MAX_INPUTS\n");
            break;
        case e_cluster_seed::BLEND:
            VTR_LOG("BLEND\n");
            break;
        case e_cluster_seed::MAX_PINS:
            VTR_LOG("MAX_PINS\n");
            break;
        case e_cluster_seed::MAX_INPUT_PINS:
            VTR_LOG("MAX_INPUT_PINS\n");
            break;
        case e_cluster_seed::BLEND2:
            VTR_LOG("BLEND2\n");
            break;
        default:
            vpr_throw(VPR_ERROR_UNKNOWN, __FILE__, __LINE__, "Unknown packer cluster_seed_type\n");
    }
    VTR_LOG("PackerOpts.connection_driven: %s", (PackerOpts.connection_driven ? "true\n" : "false\n"));
    VTR_LOG("PackerOpts.global_clocks: %s", (PackerOpts.global_clocks ? "true\n" : "false\n"));
    VTR_LOG("PackerOpts.hill_climbing_flag: %s", (PackerOpts.hill_climbing_flag ? "true\n" : "false\n"));
    VTR_LOG("PackerOpts.inter_cluster_net_delay: %f\n", PackerOpts.inter_cluster_net_delay);
    VTR_LOG("PackerOpts.timing_driven: %s", (PackerOpts.timing_driven ? "true\n" : "false\n"));
    VTR_LOG("PackerOpts.target_external_pin_util: %s", vtr::join(PackerOpts.target_external_pin_util, " ").c_str());
    VTR_LOG("\n");
}
