from django.core.management.base import BaseCommand, CommandError
from django.conf import settings

from optparse import make_option
from bson.json_util import loads
from pymongo import MongoClient
from os.path import splitext


class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--collection', '-c',
                    dest='collection',
                    help='MongoDB collection where the data will be loaded.'),
    )

    help = "Loads data from files into the MongoDB database.\n\n" \
           "Usage: manage.py mongo_load FILE"

    def handle(self, *args, **options):
        if not args:
            raise CommandError('No data filename provided.')

        collection = options.get('collection')

        connection = MongoClient()
        db = connection[settings.MONGODB_NAME]

        if not collection:
            name = splitext(args[0])[0]
            items = db[name]
        else:
            items = db[collection]

        with open(args[0], 'r') as f:
            for line in f:
                items.insert(loads(line))