import random as r
import os
import logging
import argparse

from batching_problem.generator import generate_instance

logging.basicConfig(
    level=logging.INFO,
    format="%(levelname)s %(asctime)s %(message)s",
    datefmt="%H:%M:%S",
)
logger = logging.getLogger(__name__)

parameters = {
    "small": {
        "nbr_warehouse_items": 10_000,
        "nbr_orders": 500,
        "nbr_zones": 10,
    },
    "medium": {
        "nbr_warehouse_items": 100_000,
        "nbr_orders": 5_000,
        "nbr_zones": 50,
    },
    "large": {
        "nbr_warehouse_items": 1_000_000,
        "nbr_orders": 50_000,
        "nbr_zones": 100,
    },
}

parser = argparse.ArgumentParser()
parser.add_argument(
    "-n",
    "--nbr_instances",
    type=int,
    help="Number of instances per type",
    default=5,
)
parser.add_argument(
    "-t",
    "--instance-types",
    type=str,
    help="Directory for writing instances",
    nargs="+",
    default=parameters.keys(),
    choices=parameters.keys(),
)
parser.add_argument(
    "-d",
    "--dir",
    type=str,
    help="Directory for writing instances",
    default="instances",
)


if __name__ == "__main__":
    args = parser.parse_args()
    r.seed(1)
    os.system(f"mkdir -p {args.dir}")
    for size in args.instance_types:
        for nbr in range(args.nbr_instances):
            path = f"{args.dir}/{size}-{nbr}"
            os.system(f"mkdir -p {path}")
            generate_instance(path, parameters[size])