# -*- coding:utf-8 -*-
from core.dal.base_handler import BaseHandler

def translateColumns(columns, insert=None):
    '''列从数组转换成字符串'''
    _list = []
    for column in columns:
        _c = False
        if(insert):
            if('auto_increment' == column['Extra'] or None != column['Default']):
                _c = False
            else:
                _c = True
        else:
            _c = True
        if(_c):
            _list.append('`%s`'%column['Field'])
    return _list

def select(columns, table, limit=None, offsize=None):
    '''生成SELECT语句'''
    _list = ['SELECT']
    _list.append(', '.join(translateColumns(columns)))
    _list.append('FROM')
    _list.append('`%s`'%table)
    for column in columns:
        if('auto_increment'==column['Extra']):
            _list.append('ORDER BY')
            _list.append('`%s`'%column['Field'])
            _list.append('DESC')
    if(limit):
        _list.append('LIMIT')
        if(offsize):
            _list.append(str(offsize))
            _list.append(',')
        _list.append(str(limit))
    return ' '.join(_list)

def delete(columns, table):
    '''生成DELETE语句'''
    _list = ['DELETE FROM']
    _list.append('`%s`'%table)
    _list.append('WHERE')
    for column in columns:
        if('auto_increment'==column['Extra']):
            _list.append('`%s`'%column['Field'])
            _list.append('= %s')
    return ' '.join(_list)

def insert(columns, table):
    '''生成INSERT语句'''
    _columns = translateColumns(columns, 'insert')
    _list = ['INSERT INTO']
    _list.append('`%s`'%table)
    _list.append('(%s)'%', '.join(_columns))
    _list.append('VALUES')
    _tmp = []
    for i in xrange(len(_columns)):
        _tmp.append('%s')
    _list.append('(%s)'%', '.join(_tmp))
    return ' '.join(_list)

def translateTableToClassName(table):
    '''转换表名到类名'''
    _list = table.split('_')
    _tmp = []
    for l in _list:
        _tmp.append("%s%s" % (l[0].upper(), l[1:len(l)]))
    return _tmp

def writeFile(columns, table):
    '''写入文件'''
    _columns = translateColumns(columns, 'insert')
    _list = ['# -*- coding:utf-8 -*-\n']
    _list.append('from core.dal.base_handler import BaseHandler\n\n')
    _list.append('class %sHandler(BaseHandler):\n\n' % ''.join(translateTableToClassName(table)))
    _list.append('    def select(self):\n')
    _list.append('        return self.db.query("%s")\n\n' % select(columns, table))
    _list.append('    def delete(self, id):\n')
    _list.append('        return self.db.execute("%s", id)\n\n' % delete(columns, table))
    _list.append('    def insert(self, %s):\n' % (', '.join(_columns).replace('`', '')))
    _list.append('        return self.db.execute("%s", %s)' % (insert(columns, table), ', '.join(_columns).replace('`', '')))

    _file = open('core/dal/%s_handler.py' % table, 'w')
    _file.writelines(_list)

if __name__ == "__main__":
    entries = BaseHandler().db.query("SHOW TABLES")
    for entry in entries:
        _columns = BaseHandler().db.query("SHOW COLUMNS FROM %s" % entry['Tables_in_survey'])
        writeFile(_columns, entry['Tables_in_survey'])
        print '%s OK' % entry['Tables_in_survey']

