import MySQLdb, sys, configparser, time, subprocess, os, codecs

from main_config import main_Config

def morpheme_to_mysql(project, basis_word_check, content_check):
#    config=configparser.ConfigParser()
#    config.read('main.ini')
#    mysql_id=config['settings']["id"]
#    mysql_pass=config['settings']["pass"]
#    using_os=config['settings']["os"]
    mysql_id, mysql_pass, projects, root_path, using_os = main_Config()
    time.sleep(0.1)

    path = os.getcwd()

    words = morpheme(project, mysql_id, mysql_pass, basis_word_check, path, using_os)
    time.sleep(0.1)
    speech = part_of_speech(project, mysql_id, mysql_pass, basis_word_check, path, using_os)
    time.sleep(0.1)

    speeches = content_word(project, mysql_id, mysql_pass, words, speech)

    if content_check > 0:
        content_mysql(project, mysql_id, mysql_pass)
        speech_mysql(project, mysql_id, mysql_pass, speeches)
        time.sleep(0.1)

    else:
        pass

    path1=os.getcwd() + "/morpheme_temp.txt"
    path2=os.getcwd() + "/mor_temp.txt"
    os.remove(path1)
    time.sleep(0.1)
    os.remove(path2)
    time.sleep(0.1)
    res=mysql_contents_check(project, mysql_id, mysql_pass)

    return res

def mysql_contents_check(project, mysql_id, mysql_pass):
    try:
        conn=MySQLdb.connect(db=project, user=mysql_id, passwd=mysql_pass, charset="utf8mb4")
        cursor=conn.cursor()

        time.sleep(0.1)

        sql="select count(*) from text_table"
        cursor.execute(sql)
        res=cursor.fetchall()

        res = str((res[0])[0])

        sql="select original_sentence, morpheme from text_table where sentence_id = " + res
        cursor.execute(sql)
        res=cursor.fetchall()
        res=res[0]

        time.sleep(0.1)

        conn.commit()
        cursor.close()
        conn.close()

        return res

    except Exception as e:
        print(e)

def speech_mysql(project, mysql_id, mysql_pass, speeches):
    all_speeches=[]
    for c, d in enumerate(speeches):
        d=str(d)
        d=d.replace("', '", " ").replace("['"," ").replace("']", " ")
        c += 1
        for_insert=(d,c)
        all_speeches.append(for_insert)

    try:
        conn=MySQLdb.connect(db=project, user=mysql_id, passwd=mysql_pass, charset="utf8mb4")
        cursor=conn.cursor()

        time.sleep(0.1)

        sql="update text_table set part_of_speech = %s where sentence_id = %s"
        cursor.executemany(sql, all_speeches)

        time.sleep(0.1)

        conn.commit()
        cursor.close()
        conn.close()

    except Exception as e:
        print(e)

def content_mysql(project, mysql_id, mysql_pass):
    try:
        conn=MySQLdb.connect(db=project, user=mysql_id, passwd=mysql_pass, charset="utf8mb4")
        cursor=conn.cursor()

        time.sleep(0.1)

        sql="update text_table set morpheme = content_word"
        cursor.execute(sql)

        time.sleep(0.1)

        conn.commit()
        cursor.close()
        conn.close()

    except Exception as e:
        print(e)


def content_word(project, mysql_id, mysql_pass, words, speech):
    contents=[]
    speeches=[]
    for (n, j) in zip(words, speech):
        n=n[0]
        j=j[0]
        n=n.split(" ")
        j=j.split(" ")
        content_word=[]
        content_speech=[]
        for (a, b) in zip(n, j):
            if b == "":
                pass
            elif b == "名詞" or b == "動詞" or b == "形容詞" or b == a:
                content_word.append(a)
                content_speech.append(b)
            else:
                pass
        #print(content_word)
        contents.append(content_word)
        speeches.append(content_speech)
    #print(contents)
    insert_mor_words=[]
    for c, d in enumerate(contents):
        d=str(d)
        d=d.replace("', '", " ").replace("['"," ").replace("']", " ")
        c += 1
        for_insert=(d,c)
        insert_mor_words.append(for_insert)

    column="content_word"
    time.sleep(0.1)
    insert_mysql(project, mysql_id, mysql_pass, insert_mor_words, column)
    time.sleep(0.1)

    return speeches

def part_of_speech(project, mysql_id, mysql_pass, basis_word_check, path, using_os):
    #inflection_cmd='mecab ' + path + '/morpheme_temp.txt -F"%f[1] " -U"%m " -E"\n" -o ' + path + '/mor_temp.txt'   #活用
    if using_os == "nt":
        cmd = path + '/mecab/bin/mecab.exe ' + path + '/morpheme_temp.txt -r ' + path + '/mecab/bin/mecabrc -o ' + path + '/mor_temp.txt -F"%f[0] " -U"%m " -E"\\r\\n" '
    elif using_os == "posix":
        cmd='mecab ' + path + '/morpheme_temp.txt -F"%f[0] " -U"%m " -E"\n" -o ' + path + '/mor_temp.txt'   #品詞
    else:
        pass

    popen = subprocess.Popen(cmd, shell=True)
    popen.wait()

    time.sleep(0.2)

    column="part_of_speech"

    insert_mor_words = mor_tuple(using_os)
    #print(insert_mor_words)
    insert_mysql(project, mysql_id, mysql_pass, insert_mor_words, column)

    time.sleep(0.2)

    return insert_mor_words

def morpheme(project, mysql_id, mysql_pass, basis_word_check, path, using_os):
    g = open("mor_temp.txt","w")
    g.write("")
    g.close()

    if using_os == "nt":
        if basis_word_check == 0:
            cmd = path + '/mecab/bin/mecab.exe ' + path + '/morpheme_temp.txt -r ' + path + '/mecab/bin/mecabrc -o ' + path + '/mor_temp.txt -F"%f[6] " -U"%m " -E"\\r\\n" '
        else:
            cmd = path + '/mecab/bin/mecab.exe -Owakati ' + path + '/morpheme_temp.txt -r ' + path + '/mecab/bin/mecabrc -o ' + path + '/mor_temp.txt'
    elif using_os == "posix":
        if basis_word_check == 0:
            cmd='mecab ' + path + '/morpheme_temp.txt -F"%f[6] " -U"%m " -E"\n" -o ' + path + '/mor_temp.txt'   #基本形
        else:
            cmd='mecab -Owakati ' + path + '/morpheme_temp.txt -o ' + path + '/mor_temp.txt'   #表層形
    else:
        pass

    popen = subprocess.Popen(cmd, shell=True)
    popen.wait()

    time.sleep(0.2)

    column="morpheme"

    insert_mor_words = mor_tuple(using_os)
    insert_mysql(project, mysql_id, mysql_pass, insert_mor_words, column)

    return insert_mor_words

def mor_tuple(using_os):
    g = codecs.open("mor_temp.txt", "r", "utf-8")#, "ignore")
    mor_temp=g.readlines()

    insert_text = []
    if using_os == "nt":
        win_temp=[]
        for n in mor_temp:
            if n == "\r\n":
                pass
            else:
                win_temp.append(n)
        for i,j in enumerate(win_temp):
            i += 1
            j=" " + j
            j=j.replace("\n","").replace("'","").replace("\r","")
            k=(j,i)
            #print(k)
            insert_text.append(k)
        g.close()

    elif using_os == "posix":
        for i,j in enumerate(mor_temp):
            i += 1
            j=" " + j
            j=j.replace("\n","").replace("'","")
            k=(j,i)
            #print(k)
            insert_text.append(k)
        g.close()
    #print(insert_text)
    return insert_text

def insert_mysql(project, mysql_id, mysql_pass, insert_mor_words, column):
    try:
        conn=MySQLdb.connect(db=project, user=mysql_id, passwd=mysql_pass, charset="utf8mb4")
        #conn=MySQLdb.connect(db=project, user=mysql_id, passwd=mysql_pass, charset="utf8")
        cursor=conn.cursor()

        time.sleep(0.1)

        sql="update text_table set " + column + "=%s where sentence_id = %s"
        cursor.executemany(sql, insert_mor_words)

        time.sleep(0.1)

        conn.commit()
        cursor.close()
        conn.close()

    except Exception as e:
        print(e)


if __name__=="__main__":
    project="test"
    basis=0
    content_check=1
    morpheme_to_mysql(project, basis, content_check)
