#
# SaBayDee X-Credit Service.
# By Fox
# 

import sys, os, time, traceback
import MySQLdb



def __log(message, type = 0) :
	""" ... """
	if type == 0 : 
		typeStr = 'ok'
	elif type == 1 :
		typeStr = '!!'
	elif type == 2 :
		typeStr = 'er'
		
	print typeStr + '|' + time.strftime('%Y%m%d%H%M%S') + '|' + str(message)
	#if type == 2 : traceback.print_exc(1)
	#@@ write to log file directly.
	logFileObj = file(os.path.dirname(sys.argv[0]) + "/x-credit.log", 'a', 1)
	logFileObj.write(typeStr + '|' + time.strftime('%Y%m%d%H%M%S') + '|' + str(message) + '\n')
	logFileObj.close()
	


conn = None
cur = None
qStr = None
fields = None
cols = None
row = None
rownum = None
rowcur = None


try :
		
	#@@ 
	#@@ Connect to SaBayDee DB [172.16.129.233] for find expired card.
	#@@ 
	conn = MySQLdb.connect(host="localhost", user="develop", passwd = "xsafety2005", db="a2billing")
	cur = conn.cursor()
	qStr = """
		SELECT id, card_id, to_card_id, to_card_username, x_total_day, 
			CONVERT(x_total_day, SIGNED)-CONVERT(DATEDIFF(CURDATE(), topup_date), SIGNED) as expiredays, 
			x_credit
		FROM mm_topup
		WHERE id IN (SELECT maxid as id
					 FROM mm_maxid_v
					)
			AND	x_credit_date="0000-00-00 00:00:00"
			AND CONVERT(x_total_day, SIGNED)-CONVERT(DATEDIFF(CURDATE(), topup_date), SIGNED) < 0
			;
		"""
	rownum = cur.execute(qStr)
	
	#@@ get fields data
	fields = cur.description
	cols = dict()
	for i in range(len(fields)) :
		cols[fields[i][0]]=i
		
		
	#@@ 
	#@@ Connect to SaBayDee DB REAL!!! [172.16.129.233] for adjust credit.
	#@@ 
	conn_real = MySQLdb.connect(host="localhost", user="develop", passwd = "xsafety2005", db="a2billing")
	
	#@@ get cursor
	cur_real_select = conn_real.cursor()
	cur_real_update = conn_real.cursor()
	
	rowcur = 0
	while (rowcur < rownum) :
		#@@ fetch data
		row = cur.fetchone()
		rowcur += 1
		#@ debug
		#print row[cols['id']], row[cols['to_card_id']], row[cols['expiredays']]
		
		
		rownum_real = None
		x_credit = None
		qStr = """
			SELECT credit FROM cc_card WHERE id=%d AND username='%s';
			""" % (row[cols['to_card_id']], row[cols['to_card_username']])
		##@ debug
		#print qStr	
		rownum_real = cur_real_select.execute(qStr)
		
		if rownum_real == 1 :
			x_credit = cur_real_select.fetchone()[0]
			#@ debug
			#print x_credit
			
			#@@ update mm_topup
			qStr = """
				UPDATE `mm_topup` SET `x_credit`=%.4f, x_credit_date=DATE_ADD(NOW(),INTERVAL %d DAY) WHERE `id`=%d LIMIT 1;
				""" % (x_credit, row[cols['expiredays']], row[cols['id']])
			#@ debug
##			print qStr
			cur_real_update.execute(qStr)
			
			#@@ update cc_card
			qStr = """
				UPDATE `cc_card` SET `credit`=0 WHERE id=%d AND username='%s' LIMIT 1;
			""" % (row[cols['to_card_id']], row[cols['to_card_username']])
			#@ debug
##			print qStr
			cur_real_update.execute(qStr)
			
			__log("mm_topup.id:%d, cc_card.id:%d, cc_card.username:%s" % (row[cols['id']], row[cols['to_card_id']], row[cols['to_card_username']] ), 0)
			
			
		
	
	if rowcur == 0 :
		__log("no expired card", 1)
	
	cur.close() 
	conn.close() 
	
	cur_real_select.close()
	cur_real_update.close()
	conn_real.close()
	
	
except Exception, message:
	errorMessage = "error %d: %s" % (message[0], message[1])
	__log(errorMessage, 2)


