import logging
from .i2c_array import i2c_array;
from .hwdev import hwdev
from .i2c_dev import i2c_dev


class i2c_array2(i2c_array):
    def __init__(self,config):
        i2c_dev.__init__(self,config);

#       Make array of switch states
        pars=config['parameters'];
        self.Nswitch=(len(pars)+1)//2;
        sw1=list(range(pars[0],pars[1]+1));
        sw2=([] if len(pars)<4 else list(range(pars[2],pars[3]+1)))
        sw3=([] if len(pars)<6 else list(range(pars[4],pars[5]+1)))
        sw4=([] if len(pars)<8 else list(range(pars[6],pars[7]+1)))
        sw3=sw3+sw4
        if self.Nswitch>3: self.Nswitch=3;
        self.RCU_Switch1=range(pars[0],pars[1]+1);
        self.N=len(sw1)
        if len(sw2)>0: self.N*=len(sw2)
        if len(sw3)>0: self.N*=len(sw3)
        self.I2Cmask=[0]*self.N
        self.disableI2ConError=False;
        self.sw1=[x for x in sw1 for i in range(self.N//len(sw1))]
        self.sw2=[x for x in sw2 for i in range(self.N//len(sw1)//len(sw2))]*len(sw1)
        self.sw3=[x for x in sw3]*len(sw1)*len(sw2)
        logging.debug(str(("Init",config['name'],' len=',self.N,'Nswitch=',self.Nswitch,self.sw1,self.sw2,self.sw3)))
        self.I2Ccut=3;

    def SetSwitch(self,RCUi):
        #print("Set switch element",RCUi,'=',self.sw1[RCUi],self.sw2[RCUi],(self.sw3[RCUi] if len(self.sw3)<0 else 'x'))
        self.conf['parentcls'].SetSW1(self.sw1[RCUi]);
        self.conf['parentcls'].SetSW2(self.sw2[RCUi]);
        if len(self.sw3)>0:
                self.conf['parentcls'].SetSW3(self.sw3[RCUi]);

    def SetSwitchMask(self,mask):
        logging.warn("Not implemented!!")
#        m=0;
#        for RCUi in range(self.N):
#           if mask[RCUi]: m|=1<<self.RCU_Switch1[RCUi];
#        self.conf['parentcls'].SetChannel(m);