#!/usr/bin/python

import time
from itertools import islice
from random import seed

from orgs.models import Organization


class FakeDataGenerator:
    resource = 'Fake'

    def __init__(self, batch_size=100, org_id=None):
        self.batch_size = batch_size
        self.org = self.switch_org(org_id)
        seed()

    def switch_org(self, org_id):
        o = Organization.get_instance(org_id, default=Organization.default())
        if o:
            o.change_to()
        return o

    def do_generate(self, batch, batch_size):
        raise NotImplementedError

    def pre_generate(self):
        pass

    def after_generate(self):
        pass

    def generate(self, count=100):
        self.pre_generate()
        counter = iter(range(count))
        created = 0
        while True:
            batch = list(islice(counter, self.batch_size))
            if not batch:
                break
            start = time.time()
            self.do_generate(batch, self.batch_size)
            end = time.time()
            using = round(end - start, 3)
            from_size = created
            created += len(batch)
            print('Generate %s: %s-%s [%s]' % (self.resource, from_size, created, using))
        self.after_generate()
        time.sleep(20)