#!/usr/bin/env python3

import argparse
import logging
import os
import pandas as pd

from styleclass.train import read_model, get_default_model
from styleclass.features import read_dataset, clean_dataset, add_noise, \
    generate_unknown
from styleclass.classify import evaluate_model

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Evaluate the model on test data')
    parser.add_argument('-m', '--model', help='model file', type=str)
    parser.add_argument('-d',
                        '--dataset',
                        help='reference string',
                        type=str,
                        required=True)
    parser.add_argument('-u',
                        '--unknown',
                        help='number of strings of "unknown" style',
                        type=int)
    args = parser.parse_args()

    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s %(levelname)s %(message)s')

    if args.model is None:
        model = get_default_model()
    else:
        model = read_model(args.model)

    dataset = read_dataset(args.dataset)
    dataset = clean_dataset(dataset)
    dataset = add_noise(dataset)

    if args.unknown is not None and args.unknown > 0:
        dataset_unknown = generate_unknown(dataset, args.unknown)
        dataset = pd.concat([dataset, dataset_unknown])

    print(evaluate_model(dataset, *model)[0])
