import time
from fallback import fallback
from config import simplemodel
from template import xuanxiang
from fallback import fallback
zhijing=['公称直径（mm以内）15', '公称直径（mm以内）20', '公称直径（mm以内）25', '公称直径（mm以内）32' , '公称直径（mm以内）40', '公称直径（mm以内）50', '公称直径（mm以内）65',  '公称直径（mm以内）80',  '公称直径（mm以内）100',  '公称直径（mm以内）125',  '公称直径（mm以内）150',  '公称直径（mm以内）200',  '公称直径（mm以内）250',  '公称直径（mm以内）300',  '公称直径（mm以内）350',  '公称直径（mm以内）400',  '公称直径（mm以内）450',  '公称直径（mm以内）500']
kqcs=['公称直径（mm以内）50', '公称直径（mm以内）100', '公称直径（mm以内）200', '公称直径（mm以内）300', '公称直径（mm以内）400', '公称直径（mm以内）500', '公称直径（mm以内）600']
def select_chuisao(
       B, #data
       aiclient,
             qwclient,
              sfclient,
             dw):
    options=[]
    letters = "ABCDEFGHIJKLMNOPQR"
    for i in range(len(kqcs)):
        options.append("给定选项" + letters[i]+"，内容为"+kqcs[i] )

    completion = aiclient.chat.completions.create(
        model="glm-4.5-air",
        #model="THUDM/GLM-Z1-9B-0414",
        #model="ernie-speed-128k",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "背景知识：管道规格D273*8表示管径273mm，壁厚8mm"},
            {"role": "user", "content": "问题描述： 给定一段工作内容: " + B['label'] + " " +  B['mc'] + " " + B['tz'] +  "，".join(options) + "。请选择最合适的选项，并返回字母代号，例如，返回 A"},
        ],
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": True},
        #stream=True
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    if len([x for x in json_string if x != ',' and x != '[' and x != ']' and x != ' ' and (x < 'A' or x > 'R')]) < 5:
        answer=[]
        if 'A' in json_string and len(kqcs) > 0:
            answer.append('A')
        if 'B' in json_string and len(kqcs) > 1:
            answer.append('B')
        if 'C' in json_string and len(kqcs) > 2:
            answer.append('C')
        if 'D' in json_string and len(kqcs) > 3:
            answer.append('D')
        if 'E' in json_string and len(kqcs) > 4:
            answer.append('E')
        if 'F' in json_string and len(kqcs) > 5:
            answer.append('F')
        if 'G' in json_string and len(kqcs) > 6:
            answer.append('G')
        return answer
    completion = sfclient.chat.completions.create(
        #model="glm-4.5-flash",
        model=simplemodel(),
        messages=xuanxiang(json_string),
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": False},
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    answer=[]
    if 'A' in json_string and len(kqcs) > 0:
        answer.append('A')
    if 'B' in json_string and len(kqcs) > 1:
        answer.append('B')
    if 'C' in json_string and len(kqcs) > 2:
        answer.append('C')
    if 'D' in json_string and len(kqcs) > 3:
        answer.append('D')
    if 'E' in json_string and len(kqcs) > 4:
        answer.append('E')
    if 'F' in json_string and len(kqcs) > 5:
        answer.append('F')
    if 'G' in json_string and len(kqcs) > 6:
        answer.append('G')
    
    return answer
def youqi(
       B, #data
       aiclient,
             qwclient,
              sfclient,
             dw):

    completion = aiclient.chat.completions.create(
        model="glm-4.5-air",
        #model="THUDM/GLM-Z1-9B-0414",
        #model="ernie-speed-128k",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "问题描述： 给定一段工作内容: " + B['label'] + " " +  B['mc'] + " " + B['tz'] +  '\n请问，工作内容是否要求管道刷油漆？请回答是或者否'},
        ],
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": True},
        #stream=True
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    if '否' in json_string:
        return False
    return True
def kongqichuisao(
       B, #data
       aiclient,
             qwclient,
              sfclient,
             dw):
    if B['bianma'].startswith('030804'):
        return False
    options=[]
    letters = "ABCDEFG"
    for i in range(len(kqcs)):
        options.append("给定选项" + letters[i]+"，内容为"+kqcs[i] )
    print('判断空气吹扫')
    completion = aiclient.chat.completions.create(
        model="glm-4.5-air",
        #model="THUDM/GLM-Z1-9B-0414",
        #model="ernie-speed-128k",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "背景知识：管道规格D273*8表示管径273mm，壁厚8mm"},
            {"role": "user", "content": "问题描述： 给定一段工作内容: " + B['label'] + " " +  B['mc'] + " " + B['tz'] +  '\n请问，工作内容是否明确要求空气吹扫？请回答是或者否'},
        ],
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": True},
        #stream=True
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    if '否' in json_string:
        return False
    return True
def select_zhijing(
       B, #data
       aiclient,
             qwclient,
              sfclient,
             dw):
    options=[]
    letters = "ABCDEFGHIJKLMNOPQR"
    for i in range(len(zhijing)):
        options.append("给定选项" + letters[i]+"，内容为"+zhijing[i] )

    completion = aiclient.chat.completions.create(
        model="glm-4.5-air",
        #model="THUDM/GLM-Z1-9B-0414",
        #model="ernie-speed-128k",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "背景知识：管道规格D273*8表示管径273mm，壁厚8mm"},
            {"role": "user", "content": "问题描述： 给定一段工作内容: " + B['label'] + " " +  B['mc'] + " " + B['tz'] +  "，".join(options) + "。请选择最合适的选项，并返回字母代号，例如，返回 A"},
        ],
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": True},
        #stream=True
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    if len([x for x in json_string if x != ',' and x != '[' and x != ']' and x != ' ' and (x < 'A' or x > 'R')]) < 5:
        answer=[]
        if 'A' in json_string and len(zhijing) > 0:
            answer.append('A')
        if 'B' in json_string and len(zhijing) > 1:
            answer.append('B')
        if 'C' in json_string and len(zhijing) > 2:
            answer.append('C')
        if 'D' in json_string and len(zhijing) > 3:
            answer.append('D')
        if 'E' in json_string and len(zhijing) > 4:
            answer.append('E')
        if 'F' in json_string and len(zhijing) > 5:
            answer.append('F')
        if 'G' in json_string and len(zhijing) > 6:
            answer.append('G')
        if 'H' in json_string and len(zhijing) > 7:
            answer.append('H')
        if 'I' in json_string and len(zhijing) > 8:
            answer.append('I')
        if 'J' in json_string and len(zhijing) > 9:
            answer.append('J')
        if 'K' in json_string and len(zhijing) > 10:
            answer.append('K')
        if 'L' in json_string and len(zhijing) > 11:
            answer.append('L')
        if 'M' in json_string and len(zhijing) > 12:
            answer.append('M')
        if 'N' in json_string and len(zhijing) > 13:
            answer.append('N')
        if 'O' in json_string and len(zhijing) > 14:
            answer.append('O')
        if 'P' in json_string and len(zhijing) > 15:
            answer.append('P')
        if 'Q' in json_string and len(zhijing) > 16:
            answer.append('Q')
        if 'R' in json_string and len(zhijing) > 17:
            answer.append('R')
        return answer
    completion = sfclient.chat.completions.create(
        #model="glm-4.5-flash",
        model=simplemodel(),
        messages=xuanxiang(json_string),
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": False},
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    answer=[]
    if 'A' in json_string and len(zhijing) > 0:
        answer.append('A')
    if 'B' in json_string and len(zhijing) > 1:
        answer.append('B')
    if 'C' in json_string and len(zhijing) > 2:
        answer.append('C')
    if 'D' in json_string and len(zhijing) > 3:
        answer.append('D')
    if 'E' in json_string and len(zhijing) > 4:
        answer.append('E')
    if 'F' in json_string and len(zhijing) > 5:
        answer.append('F')
    if 'G' in json_string and len(zhijing) > 6:
        answer.append('G')
    if 'H' in json_string and len(zhijing) > 7:
        answer.append('H')
    if 'I' in json_string and len(zhijing) > 8:
        answer.append('I')
    if 'J' in json_string and len(zhijing) > 9:
        answer.append('J')
    if 'K' in json_string and len(zhijing) > 10:
        answer.append('K')
    if 'L' in json_string and len(zhijing) > 11:
        answer.append('L')
    if 'M' in json_string and len(zhijing) > 12:
        answer.append('M')
    if 'N' in json_string and len(zhijing) > 13:
        answer.append('N')
    if 'O' in json_string and len(zhijing) > 14:
        answer.append('O')
    if 'P' in json_string and len(zhijing) > 15:
        answer.append('P')
    if 'Q' in json_string and len(zhijing) > 16:
        answer.append('Q')
    if 'R' in json_string and len(zhijing) > 17:
        answer.append('R')
    
    return answer
def aifilter1(A, #options
       B, #data
       aiclient,
             qwclient,
              sfclient,
             dw):
    options=[]
    letters = "ABCDEFGHIJKLMN"
    for i in range(len(A)):
        options.append("给定选项" + letters[i]+"，内容为"+A[i] )

    completion = aiclient.chat.completions.create(
        model="glm-4.5-air",
        #model="THUDM/GLM-Z1-9B-0414",
        #model="ernie-speed-128k",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": " 特殊处理要求一：如果工作内容描述没有提及管道冲洗，则去掉所有管道冲洗的选项"},
            {"role": "user", "content": " 重要提示：选项指的是给定的A、B、C之类的选项，不是指的工作内容中的可能的1、2、3这样罗列的特征"},
            {"role": "user", "content": " 重要提示：除特殊处理要求提及的内容外，不需考虑选项内容与工作内容是否符合，只需要根据特殊处理要求做出处理"},
            {"role": "user", "content": "问题描述： 给定一段工作内容: " + B['label'] + " " +  B['mc'] + " " + B['tz'] +  "，".join(options) + "。请根据处理要求做出处理，并返回结果, 删除选项必须对应到明确的特殊处理要求，不要擅自删除选项。例如，如果处理完后剩余A,B,C三个选项，请返回[A,B,C]"},
        ],
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": True},
        #stream=True
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    if len([x for x in json_string if x != ',' and x != '[' and x != ']' and x != ' ' and (x < 'A' or x > 'M')]) < 5:
        answer=[]
        if 'A' in json_string and len(A) > 0:
            answer.append(A[0])
        if 'B' in json_string and len(A) > 1:
            answer.append(A[1])
        if 'C' in json_string and len(A) > 2:
            answer.append(A[2])
        if 'D' in json_string and len(A) > 3:
            answer.append(A[3])
        if 'E' in json_string and len(A) > 4:
            answer.append(A[4])
        if 'F' in json_string and len(A) > 5:
            answer.append(A[5])
        if 'G' in json_string and len(A) > 6:
            answer.append(A[6])
        if 'H' in json_string and len(A) > 7:
            answer.append(A[7])
        if 'I' in json_string and len(A) > 8:
            answer.append(A[8])
        if 'J' in json_string and len(A) > 9:
            answer.append(A[9])
        return answer
    completion = sfclient.chat.completions.create(
        #model="glm-4.5-flash",
        model=simplemodel(),
        messages=xuanxiang(json_string),
        extra_body={"thinking": {"type": "disabled"}},
        #extra_body={"enable_thinking": False},
    )
    json_string = completion.choices[0].message.content
    print(json_string)
    answer=[]
    if 'A' in json_string and len(A) > 0:
        answer.append(A[0])
    if 'B' in json_string and len(A) > 1:
        answer.append(A[1])
    if 'C' in json_string and len(A) > 2:
        answer.append(A[2])
    if 'D' in json_string and len(A) > 3:
        answer.append(A[3])
    if 'E' in json_string and len(A) > 4:
        answer.append(A[4])
    if 'F' in json_string and len(A) > 5:
        answer.append(A[5])
    if 'G' in json_string and len(A) > 6:
        answer.append(A[6])
    if 'H' in json_string and len(A) > 7:
        answer.append(A[7])
    if 'I' in json_string and len(A) > 8:
        answer.append(A[8])
    if 'J' in json_string and len(A) > 9:
        answer.append(A[9])
    return answer

def postprocess0308(selected, data, aiclient, qwclient, sfclient, label_name, name_dw, candidates):
    prime = selected
    if len([x for x in selected if ' 低压碳钢管(电弧焊)' in x]) > 0:
        prime = [x for x in prime if ' 低压碳钢管(电弧焊)' not in x]
        option = select_zhijing(data, aiclient, qwclient, sfclient, name_dw)
        if 'A' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 15')
        elif 'B' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 20')
        elif 'C' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 25')
        elif 'D' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 32')
        elif 'E' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 40')
        elif 'F' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 50')
        elif 'G' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 65')
        elif 'H' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 80')
        elif 'I' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 100')
        elif 'J' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 125')
        elif 'K' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 150')
        elif 'L' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 200')
        elif 'M' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 250')
        elif 'N' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 300')
        elif 'O' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 350')
        elif 'P' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 400')
        elif 'Q' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 450')
        elif 'R' in option:
            prime.append('第八册 工业管道工程 第一章 管道安装 1.1 低压管道 1.1.5 碳钢管(电弧焊) 低压碳钢管(电弧焊) 公称直径(mm以内) 500')

    if data['bianma'].startswith('030801'):
        prime = [x for x in prime if '管件' not in x]
    if kongqichuisao(data, aiclient, qwclient, sfclient, name_dw):
        prime = [x for x in prime if '空气吹扫' not in x]
        t = select_chuisao(data, aiclient, qwclient, sfclient, name_dw)
        if 'A' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 50')
        elif 'B' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 100')
        elif 'C' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 200')
        elif 'D' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 300')
        elif 'E' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 400')
        elif 'F' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 500')
        elif 'G' in t:
            prime.append('第八册 工业管道工程 第六章 管道压力试验、吹扫与清洗 6.2 管道系统吹扫 6.2.2 空气吹扫 管道系统空气吹扫 公称直径(mm以内) 600')

    
    else:
        print(prime)
        print('clear chuisao')
        prime = [x for x in prime if '空气吹扫' not in x]
    if youqi(data, aiclient, qwclient, sfclient, name_dw):
        prime = prime + ['第十一册 刷油、防腐蚀、绝热工程 第二章 刷油工程 2.1 管道刷油 管道刷油 防锈漆 第一遍', '第十一册 刷油、防腐蚀、绝热工程 第二章 刷油工程 2.1 管道刷油 管道刷油 防锈漆 第二遍', '第十一册 刷油、防腐蚀、绝热工程 第二章 刷油工程 2.1 管道刷油 管道刷油 调和漆 第一遍', '第十一册 刷油、防腐蚀、绝热工程 第二章 刷油工程 2.1 管道刷油 管道刷油 调和漆 第二遍']
    return list(set(prime))
