import streamlit as st
from termcolor import colored


def check_0th_case(
        check_if_3_30_present,
        clean_oik_docx,
        clean_oik_pdf,
        clean_days_docx,
):
    print(colored("check_0th_case", 'blue'),
          f"\t{check_if_3_30_present = }",
          f"\t{clean_oik_docx = }",
          f"\t{clean_oik_pdf = }",
          f"\t{clean_days_docx = }", sep="\n")

    if all([
        check_if_3_30_present == True,
        clean_oik_docx not in ["не установлены", "не устанавливается"],
        clean_oik_pdf != "не требуется"
    ]):
        return clean_days_docx == 15  # (== True if clean_days_docx == 15 else False)

    return None


def check_1st_case(
        clean_oik_pdf,
        clean_oik_docx,
        ot_nachalnoi_tseni_kontracta,
        ot_tseni_kontracta,
        MCKs,

):
    print(colored("case1", 'blue'),
          f"\t{clean_oik_pdf = }",
          f"\t{clean_oik_docx = }",
          f"\t{MCKs = }", sep="\n")

    print(f"{ot_nachalnoi_tseni_kontracta = }")
    print(f"{ot_tseni_kontracta = }")
    correct = False
    if all([
        "Российский рубль" in clean_oik_pdf,
        ot_nachalnoi_tseni_kontracta,
        "%" in clean_oik_docx,
    ]):
        clean_oik_pdf = float(clean_oik_pdf.removesuffix(" Российский рубль"))
        for MCK in MCKs:
            price_docx = float(
                clean_oik_docx.strip("% ").strip("(десять) ").strip("(пять) ").strip("(тридцать) ")) * MCK / 100
            # print("СРАВНЕНИЕ", clean_oik_pdf, "||", price_docx)
            # print(clean_oik_pdf)
            if abs(clean_oik_pdf - price_docx) < 3:
                #print(colored("ВЕРНО", 'green'))
                st.write(":green[ВЕРНО]")
                #st.write("ВЕРНО")
                correct = True
    elif all([
        "%" in clean_oik_pdf,
        ot_nachalnoi_tseni_kontracta,
        "%" in clean_oik_docx,
    ]):
        clean_oik_pdf = float(clean_oik_pdf.strip(" %"))
        if abs(clean_oik_pdf - float(clean_oik_docx.strip("% ").strip("(десять) ").strip("(пять) ").strip("(тридцать) "))) == 0:
            #print(colored("ВЕРНО", 'green'))
            st.write(":green[ВЕРНО]")
            #st.write("ВЕРНО")
            correct = True

    
    
    
    if not correct:
        #print(colored("ОШИБКА", 'magenta'))
        st.write(":red[ОШИБКА]")
        #st.write("ОШИБКА")
        st.write("Если не указаны ч.24 ст.22 и ч.3 ст.30, то обеспечение исполнения контракта устанавливается от НАЧАЛЬНОЙ (максимальной) цены")
        st.write("Условие Извещения (Российский рубль) = Условие ПК % * НМЦК")
        st.write("Условие Извещения 'не требуется' = Условие ПК 'не установлено'")
        #st.write("Срок возврата обеспечения 30 дней")


def check_2nd_case(
        clean_oik_pdf,
        clean_oik_docx,
        ot_tseni_kontracta,
        MCKs,
        clean_days_docx,
        check_if_3_30_present,

):
    print(colored("case2", 'blue'),
          f"\t{clean_oik_pdf = }",
          f"\t{clean_oik_docx = }",
          f"\t{MCKs = }", sep="\n")
    correct = False
    if all([
        "%" in clean_oik_pdf,
        "%" in clean_oik_docx,

    ]):

        print("СРАВНЕНИЕ", clean_oik_pdf, "||", float(clean_oik_docx.strip("% ")))
        clean_oik_pdf = float(
            clean_oik_pdf.removesuffix(" Российский рубль").strip(" %"))
        print(clean_oik_pdf)
        if abs(clean_oik_pdf - float(clean_oik_docx.strip("% ").strip("(десять) ").strip("(пять) ").strip(
                "(тридцать) "))) < 3:
            if ot_tseni_kontracta:
                check0 = check_0th_case(
                    check_if_3_30_present,
                    clean_oik_docx,
                    clean_oik_pdf,
                    clean_days_docx,
                )
                if check0 == True:
                   # print(colored("ВЕРНО", 'green'))
                    st.write(":green[ВЕРНО]")
                   # st.write("ВЕРНО")
                    correct = True
                elif check0 == False:
                    #print(colored("ОШИБКА в днях OIK", 'magenta'))
                    st.write(":red[ОШИБКА в днях]")
                    #st.write("ОШИБКА в днях")
                    st.write("При выборе ч.3.ст.30 возврат обеспечения исполнения контракта - 15 дней")

    if not correct:
       # print(colored("ОШИБКА", 'magenta'))
        st.write(":red[ОШИБКА]")
       # st.write("ОШИБКА")
        st.write("Условие Извещения % = Условие ПК %")
        st.write("При указании ч.3 ст.30 и ч.24 ст.22 обеспечение исполнения контракта устанавливается от ЦЕНЫ КОНТРАКТА")
        st.write("Условие Извещения 'не требуется' = Условие ПК 'не установлено'")




def check_3rd_case(
            clean_oik_pdf,
            clean_oik_docx,
            ot_nachalnoi_tseni_kontracta,
            ot_max_znacenia_tseni_kontracta,
            MCKs,
        ):
    print(colored("case3", 'blue'),
          f"\t{clean_oik_pdf = }",
          f"\t{clean_oik_docx = }",
          f"\t{MCKs = }", sep="\n")
    correct = False
    if all([
        "Российский рубль" in clean_oik_pdf,
        "%" in clean_oik_docx,
            ]):
        clean_oik_pdf = float(clean_oik_pdf.removesuffix(" Российский рубль"))
        print(f"clean_oik_pdf: {clean_oik_pdf}")
        for MCK in MCKs:

            if abs(clean_oik_pdf - (float(clean_oik_docx.strip("% ").strip("(десять) ").strip("(пять) ").strip("(тридцать) ")) * MCK / 100)) < 3:
                if ot_nachalnoi_tseni_kontracta or ot_max_znacenia_tseni_kontracta:
                   # print(colored("ВЕРНО",'green'))
                    st.write(":green[ВЕРНО]")
                  #  st.write("ВЕРНО")
                    correct = True
    if not correct:
       # print(colored("ОШИБКА",'magenta'))
        st.write(":red[ОШИБКА]")
        #st.write("ОШИБКА")
        st.write("При указании ч.24 ст.22 и отсутствии ч.3 ст.30 обеспечение исполнения контракта устанавливается от МАКСИМАЛЬНОГО ЗНАЧЕНИЯ ЦЕНЫ КОНТРАКТА")
        st.write("Условие Извещения (Российский рубль) = Условие ПК % * НМЦК")
        st.write("Условие Извещения 'не требуется' = Условие ПК 'не установлено'")




def check_4th_case(
            clean_oik_pdf,
            clean_oik_docx,
            ot_nachalnoi_tseni_kontracta,
            ot_tseni_kontracta,
            MCKs,
            clean_days_docx,
            check_if_3_30_present,
            percent_before_price
        ):
    print(colored("case4", 'blue'),
          f"\t{clean_oik_pdf = }",
          f"\t{clean_oik_docx = }",
          f"\t{MCKs = }",
          f"\t{ot_nachalnoi_tseni_kontracta = }",
          f"\t{ot_tseni_kontracta = }",
          sep="\n")

    correct = False
    if all([
        percent_before_price == False,
        "%" in clean_oik_pdf,
        "%" in clean_oik_docx,
            ]):
        if float(clean_oik_pdf.strip("% ")) == float(clean_oik_docx.strip("% ").strip("(десять) ").strip("(пять) ").strip("(тридцать) ")):
            if ot_tseni_kontracta and not ot_nachalnoi_tseni_kontracta:
                check0 = check_0th_case(
                    check_if_3_30_present,
                    clean_oik_docx,
                    clean_oik_pdf,
                    clean_days_docx,
                )
                print("check0", check0)
                if check0 == True:
                   # print(colored("ВЕРНО",'green'))
                    st.write(":green[ВЕРНО]")
                   # st.write("ВЕРНО")

                    correct = True
                elif check0 == False:
                  #  print(colored("ОШИБКА в днях OIK",'magenta'))
                    st.write(":red[ОШИБКА в днях]")
                  #  st.write("ОШИБКА в днях")
                    st.write("При выборе ч.3.ст.30 возврат обеспечения исполнения контракта - 15 дней")

    if not correct:
       # print(colored("ОШИБКА",'magenta'))
       # st.write("ОШИБКА")
        st.write(":red[ОШИБКА]")
        st.write("При указании ч.3 ст.30  обеспечение исполнения контракта устанавливается от ЦЕНЫ КОНТРАКТА")
        st.write("Условие Извещения % = Условие ПК %")
        st.write("Условие Извещения 'не требуется' = Условие ПК 'не установлено'")


def check_correctness(
        check_if_3_30_present,
        check_if_24_22_present,
        clean_oik_pdf,
        clean_oik_docx,
        ot_nachalnoi_tseni_kontracta,
        ot_tseni_kontracta,
        ot_max_znacenia_tseni_kontracta,
        MCKs,
        clean_days_docx,
        percent_before_price
):
    #    """
    #      === case5 ===
    # elif 'Обеспечение исполнения контракта не требуется' in pdf and "Требования к обеспечению исполнению Контракта не установлены" in docx:
    #     if "не требуется"="не установлены":
    #         print("ВЕРНО")
    #     else:
    #         print ("ОШИБКА")
    #         break
    #    """
    if clean_oik_pdf == "не требуется" and clean_oik_docx == "не установлены" or \
            clean_oik_pdf == "не требуется" and clean_oik_docx == "не устанавливается":
        print(
            colored("case5", 'blue'),
            f"\t{clean_oik_pdf = }",
            f"\t{clean_oik_docx = }", sep="\n")
        #print(colored("ВЕРНО", 'green'))
        st.write(":green[ВЕРНО]")
       # st.write("ВЕРНО")
        check0 = check_0th_case(
            check_if_3_30_present=check_if_3_30_present,
            clean_oik_docx=clean_oik_docx,
            clean_oik_pdf=clean_oik_pdf,
            clean_days_docx=clean_days_docx,
        )
        if check0 == True:
          #  print(colored("ВЕРНО", 'green'))
            st.write(":green[ВЕРНО]")
          #  st.write("ВЕРНО")
            correct = True
        elif check0 == False:
           # print(colored("ОШИБКА в днях OIK", 'magenta'))
            st.write(":red[ОШИБКА в днях]")
           # st.write("ОШИБКА в днях")
            st.write("При выборе ч.3 ст.30 возврат обеспечения - 15 дней")

    # """
    # === case1 ===
    # if  "ч. 24 ст. 22" and "ч. 3 ст. 30" not in pdf:
    #     if oik.pdf Российский рубль = oik.docx %|процент(ов,а) от НАЧАЛЬНОЙ МАКСИМАЛЬНОЙ (НМЦ) docx *"Начальная (максимальная) цена ".pdf Российский рубль:
    #         print("ВЕРНО")
    #     else:
    #         print ("ОШИБКА")
    #         break
    # """
    elif not check_if_3_30_present and not check_if_24_22_present:
        check_1st_case(
            clean_oik_pdf=clean_oik_pdf,
            clean_oik_docx=clean_oik_docx,
            ot_nachalnoi_tseni_kontracta=ot_nachalnoi_tseni_kontracta,
            ot_tseni_kontracta=ot_tseni_kontracta,
            MCKs=MCKs,
        )

    #   """
    #     === case2 ===
    # elif "ч. 3 ст. 30" and "ч. 24 ст. 22" in pdf :
    #   if oik.pdf % = oik.docx %|процент(ов,а) от ЦЕНЫ КОНТРАКТА:
    #         print("ВЕРНО")
    #   else:
    #        print ("ОШИБКА")
    #        break
    #   """
    elif check_if_3_30_present and check_if_24_22_present:
        check_2nd_case(
            clean_oik_pdf=clean_oik_pdf,
            clean_oik_docx=clean_oik_docx,
            # ot_nachalnoi_tseni_kontracta,
            ot_tseni_kontracta=ot_tseni_kontracta,
            MCKs=MCKs,
            clean_days_docx=clean_days_docx,
            check_if_3_30_present=check_if_3_30_present,

        )

    #    """
    #   === case3 ===
    # elif "ч. 24 ст. 22" in pdf and "ч. 3 ст. 30" not in pdf:
    #     if oik.pdf Российский рубль = "Максимальное значение цены контракта".pdf * %|процент(ов,а) от ЦЕНЫ контракта.docx:
    #         print("ВЕРНО")
    #     else:
    #         print ("ОШИБКА")
    #         break
    #   """
    elif check_if_24_22_present and not check_if_3_30_present:
        check_3rd_case(
            clean_oik_pdf=clean_oik_pdf,
            clean_oik_docx=clean_oik_docx,
            ot_nachalnoi_tseni_kontracta=ot_nachalnoi_tseni_kontracta,
            ot_max_znacenia_tseni_kontracta=ot_max_znacenia_tseni_kontracta,
            # ot_tseni_kontracta,
            MCKs=MCKs,
        )

    #    """
    #      === case4 ===
    # elif "ч. 3 ст. 30" in pdf and "ч. 24 ст. 22" not in pdf:
    #     if oik.pdf  % = oik.docx  %|процент(ов,а) от ЦЕНЫ контракта:
    #         print("ВЕРНО")
    #     else:
    #         print ("ОШИБКА")
    #         break
    #    """
    elif check_if_3_30_present and not check_if_24_22_present:
        check_4th_case(
            clean_oik_pdf=clean_oik_pdf,
            clean_oik_docx=clean_oik_docx,
            ot_nachalnoi_tseni_kontracta=ot_nachalnoi_tseni_kontracta,
            ot_tseni_kontracta=ot_tseni_kontracta,
            MCKs=MCKs,
            clean_days_docx=clean_days_docx,
            check_if_3_30_present=check_if_3_30_present,
            percent_before_price=percent_before_price
        )

    #    """
    #     === case7 ===
    # elif "обеспечение исполнения контракта» приложения 2 к Контракту" in docx:
    #     print("ERROR Требуется проверка ")
    # else:
    #     print("ERROR Требуется проверка")
    #     break
    #     """
    else:
      #  print(colored("ERROR Требуется проверка", 'magenta'))
        st.write(":red[ERROR Требуется проверка]")
      #  st.write("ERROR Требуется проверка")
        # break