import json
import os

TRAIN_CHANNEL = "training"
EVAL_CHANNEL = "evaluation"
MODEL_CHANNEL = "pretrained_model"
MODEL_OUTPUT_DIR = os.environ.get("SM_MODEL_DIR", "/opt/ml/model")
MODEL_OUTPUT_PATH = os.path.join(MODEL_OUTPUT_DIR, "vw.model")


def save_vw_metadata(meta):
    """
    Save metadata of a Vowpal Wabbit model.
    """
    file_location = os.path.join(MODEL_OUTPUT_DIR, "vw.metadata")
    with open(file_location, "w") as f:
        f.write(meta)


def save_vw_model(model=None, meta=None):
    """
    Save a Vowpal Wabbit model.
    """
    if model:
        model.save(MODEL_OUTPUT_PATH)
    save_vw_metadata(meta)


def transform_to_vw(x):
    """
    Transform context(feature) to VW format.
    """
    x = json.loads(x)
    # feature:feature_value
    return " ".join(["%s:%s" % (i + 1, j) for i, j in enumerate(x)])