from collections import Counter

REGION_ID_TEMPLATE = 'region_%04d'
LINE_ID_TEMPLATE = 'region_%04d_line_%04d'

class EynollahIdCounter:

    def __init__(self, region_idx=0, line_idx=0):
        self._counter = Counter()
        self._initial_region_idx = region_idx
        self._initial_line_idx = line_idx
        self.reset()

    def reset(self):
        self.set('region', self._initial_region_idx)
        self.set('line', self._initial_line_idx)

    def inc(self, name, val=1):
        self._counter.update({name: val})

    def get(self, name):
        return self._counter[name]

    def set(self, name, val):
        self._counter[name] = val

    def region_id(self, region_idx=None):
        if region_idx is None:
            region_idx = self._counter['region']
        return REGION_ID_TEMPLATE % region_idx

    def line_id(self, region_idx=None, line_idx=None):
        if region_idx is None:
            region_idx = self._counter['region']
        if line_idx is None:
            line_idx = self._counter['line']
        return LINE_ID_TEMPLATE % (region_idx, line_idx)

    @property
    def next_region_id(self):
        self.inc('region')
        self.set('line', 0)
        return self.region_id()

    @property
    def next_line_id(self):
        self.inc('line')
        return self.line_id()
