import taos
import time 
import sys
import getopt
class ConnectorChecker:
    def init(self):  
        self.host = "127.0.0.1"
        self.dbName = "test"
        self.tbName = "weather"
        self.user = "root"
        self.password = "taosdata"
        
       
    def sethdt(self,FQDN,dbname,tbname):
        if(FQDN):
            self.host=FQDN
        if(dbname):
            self.dbname=dbname
        if(tbname):
            self.tbName
    def printSql(self,sql,elapsed):
        print("[ "+"OK"+" ]"+" time cost: %s ms, execute statement ====> %s"
                   %(elapsed,sql))
    def executeQuery(self,sql):
        try:
            start=time.time()
            execute = self.cl.execute(sql)
            elapsed = (time.time()-start)*1000
            self.printSql(sql,elapsed)
            data = self.cl.fetchall()
            numOfRows = self.cl.rowcount
            numOfCols = len(self.cl.description)
            for irow in range(numOfRows):
                print("Row%d: ts=%s, temperature=%d, humidity=%f" %(irow, data[irow][0], data[irow][1],data[irow][2]))
        except Exception as e:
            print("Failure sql: %s,exception: %s" %sql,str(e))  
    def execute(self,sql):
        try:
            start=time.time()
            execute = self.cl.execute(sql)
            elapsed = (time.time()-start)*1000
            self.printSql(sql,elapsed)
           
        except Exception as e:
            print("Failure sql: %s,exception: %s" %
                sql,str(e))
    def close(self):
        self.cl.close()
        self.conn.close()
    def createDatabase(self):
        sql="create database if not exists %s" % self.dbName
        self.execute(sql)
    def useDatabase(self):
        sql="use %s" % self.dbName
        self.execute(sql)
    def createTable(self):
        sql="create table if not exists %s.%s (ts timestamp, temperature float, humidity int)"%(self.dbName,self.tbName)
        self.execute(sql)
    def checkDropTable(self):
        sql="drop table if exists " + self.dbName + "." + self.tbName + ""
        self.execute(sql)
    def checkInsert(self):
        sql="insert into test.weather (ts, temperature, humidity) values(now, 20.5, 34)"
        self.execute(sql)
    def checkSelect(self):
        sql = "select * from test.weather"
        self.executeQuery(sql)
    def srun(self):
        print(self.host)
        try:
            self.conn = taos.connect(host=self.host,user=self.user,password=self.password)
            #self.conn = taos.connect(self.host,self.user,self.password)
        except Exception as e:
            print("connection failed: %s"%self.host)
            exit(1)
        print("[ OK ] Connection established.")
        self.cl = self.conn.cursor()

def main(argv):
    FQDN=''
    dbname=''
    tbname=''
    try:
      opts, args = getopt.getopt(argv,"h:d:t:",["FQDN=","ifile=","ofile="])
    except getopt.GetoptError:
        print ('PYTHONConnectorChecker.py -h <FQDN>')
        sys.exit(2)
    for opt, arg in opts:
        if opt in ("-h", "--FQDN"):
            FQDN=arg
        elif opt in ("-d", "--dbname"):
            dbname = arg
        elif opt in ("-t", "--tbname"):
            tbname = arg
   
    checker = ConnectorChecker()
    checker.init()
    checker.sethdt(FQDN,dbname,tbname)
    checker.srun()
    checker.createDatabase()
    checker.useDatabase()
    checker.checkDropTable()
    checker.createTable()
    checker.checkInsert()
    checker.checkSelect()
    checker.checkDropTable()
    checker.close()



if __name__ == "__main__":
    main(sys.argv[1:])
           

