#!/usr/bin/env python
#
import argparse
import os
import sys

import django

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
APPS_DIR = os.path.join(BASE_DIR, 'apps')
sys.path.insert(0, APPS_DIR)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jumpserver.settings")
django.setup()

from resources.assets import AssetsGenerator, NodesGenerator, PlatformGenerator
from resources.users import UserGroupGenerator, UserGenerator
from resources.perms import AssetPermissionGenerator
from resources.terminal import CommandGenerator, SessionGenerator
from resources.accounts import AccountGenerator

resource_generator_mapper = {
    'asset': AssetsGenerator,
    'platform': PlatformGenerator,
    'node': NodesGenerator,
    'user': UserGenerator,
    'user_group': UserGroupGenerator,
    'asset_permission': AssetPermissionGenerator,
    'command': CommandGenerator,
    'session': SessionGenerator,
    'account': AccountGenerator,
    'all': None
    # 'stat': StatGenerator
}


def main():
    parser = argparse.ArgumentParser(description='Generate fake data')
    parser.add_argument(
        'resource', type=str,
        choices=resource_generator_mapper.keys(),
        default='all',
        help="resource to generate"
    )
    parser.add_argument('-c', '--count', type=int, default=1000)
    parser.add_argument('-b', '--batch_size', type=int, default=100)
    parser.add_argument('-o', '--org', type=str, default='')
    args = parser.parse_args()
    resource, count, batch_size, org_id = args.resource, args.count, args.batch_size, args.org
    resource = resource.lower().rstrip('s')

    generator_cls = []
    if resource == 'all':
        generator_cls = resource_generator_mapper.values()
    else:
        generator_cls.append(resource_generator_mapper[resource])

    for _cls in generator_cls:
        generator = _cls(org_id=org_id, batch_size=batch_size)
        generator.generate(count)


if __name__ == '__main__':
    main()