from ..Hurricane import DbU, DataBase
from .           import dtr

if not DataBase.getDB(): DataBase.create()

rules = dtr.Rules()


class Flag ( object ):

    StandardRules = 0x0001
    MIMRules      = 0x0002
    AllRules      = StandardRules|MIMRules


def getRules ():
    global rules
    if not rules.isLoaded():
        rules.load( DataBase.getDB().getTechnology() )
    return rules


def toNano  ( value ): return DbU.toPhysical( value, DbU.UnitPowerNano  )
def toMicro ( value ): return DbU.toPhysical( value, DbU.UnitPowerMicro )
def toUnity ( value ): return DbU.toPhysical( value, DbU.UnitPowerUnity )


def adjustOnGrid ( unit, mode='upper' ):
    if   mode == 'upper': return DbU.getOnPhysicalGrid(unit, DbU.SnapModeSuperior)
    elif mode == 'lower': return DbU.getOnPhysicalGrid(unit, DbU.SnapModeInferior)
    elif mode == 'near' : return DbU.getOnPhysicalGrid(unit, DbU.SnapModeNearest )
    else:
        print( '[ERROR] oroshi.adjustOnGrid(): "{}" is not a valid mode.'.format(mode) )
        print( '        ("upper", "lower" or "near")' )
        return 0