#include "group.h"
#include "type_id.h"
#include "group_seeds.h"

#include <iostream>

namespace klotski {



CommonCode Group::group_seed(const GroupId &group_id) {

    // TODO: check value

    auto type_id = group_id.type_id();

    auto offset = TYPE_ID_OFFSET[type_id];

    std::cout << "size: " << TYPE_ID_GROUP_NUM[type_id] << std::endl;

    auto k = GROUP_SEEDS_INDEX[offset + group_id.unwrap()];

    std::cout << "tmp index: " << k << std::endl;

    auto r = k + offset;

    std::cout << "real index: " << r << std::endl;

    auto seed = CommonCode(GROUP_SEEDS[r]);

    std::cout << "seed: " << seed << std::endl;

    std::cout << RawCode(seed) << std::endl;

    return seed;
}

std::vector<CommonCode> Group::group_seeds(const TypeId &type_id) {
    auto offset = GROUP_SEEDS + TYPE_ID_OFFSET[type_id.unwrap()]; // group id offset
    return {offset, offset + TYPE_ID_GROUP_NUM[type_id.unwrap()]};
}



} // namespace klotski