import sys
sys.coinit_flags = 0


from time import sleep
import asyncio
from math import pi
from random import shuffle
from typing import Any, List, Optional
from win32com.client import CDispatch, Dispatch
import flet as ft
from flet import (
    AppBar,
    ElevatedButton,
    Page,
    Text,
    View,
    colors,
    Row,
    MainAxisAlignment,
    CrossAxisAlignment,
    Image,
    ImageFit,
    TextAlign,
    Column,
    TextField,
    KeyboardType,
    icons,
    Slider,
    ProgressBar,
    OutlinedButton,
    IconButton,
    BottomSheet,
    Container,
    AlertDialog,
    ButtonStyle,
    TextButton,
    Icon,
    ListView,
    ListTile,
    PopupMenuButton,
    PopupMenuItem,
    Padding,
    Checkbox,
    alignment,
    BlendMode,
    LinearGradient,
    ShaderMask,
    Rotate,
    Divider,
    Alignment,
    border,
    border_radius,
    Offset,
    TextStyle,
    UserControl,
    BoxShadow,
    TextOverflow,
    FontWeight,
    VerticalDivider,
    SafeArea,
    Tooltip,
)
from flet_core import Control
from flet_core.bottom_app_bar import BottomAppBar
from flet_core.control import OptionalNumber
from flet_core.floating_action_button import (
    FloatingActionButton,
)
from flet_core.navigation_bar import NavigationBar
from flet_core.navigation_drawer import NavigationDrawer
from flet_core.types import (
    CrossAxisAlignment,
    MainAxisAlignment,
    PaddingValue,
    ScrollMode,
)
from IEksen import IEksen
from IHibridBody import IHibridBody
from IHibridBodyler import IHibridBodyler
from IPart import IPart
from IPartDokuman import IPartDokuman
from Projeler.Yalin.FikoPostTakipcisi.sayfalar.ana_sayfa.item_program import ProgramItem
from resimler import fikoyt_logo, eksen_simge, mdf_kutuk_resim, hiper_gif
import pythoncom
import win32com
from IFikatia import IFikatia
from IProgram import IProgram

from Projeler.Yalin.FikoPostTakipcisi.globals import catia, get_catia_instances
import flet
class FikoDilimleAnaSayfa(View):
    def __init__(
        self,
        mainPage: Page,
    ):
        super().__init__(route="/")
        self.mainPage = mainPage
        self.spacing = 0
        self.padding = 2
        # --->
        # global catia
        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
        self.fikatia = self.mainPage.fikatia#IFikatia(win32com.client.GetActiveObject("Catia.Application"))
       
        self.fikatia.marshalHazirla()
        self.tumProgramlar = []
        po = self.fikatia.aktifDokuman.asProcessDokuman.partOperasyonlari.item(0)
        po.marshalHazirla()
        for prg in range(0, po.programlar.sayisi):
            s = po.programlar[prg]
            s.marshalHazirla()
            self.tumProgramlar.append(po.programlar[prg])
        # --->
        self.hazirla()

    def hazirla(self):
        # pythoncom.CoInitialize()
        # self.fikatia.catMarshall
        # self.fikatia.Seek(0, 0)
        # fikatia = IFikatia(
        #     Dispatch(
        #         pythoncom.CoGetInterfaceAndReleaseStream(
        #             self.fikatia, pythoncom.IID_IDispatch
        #         )
        #     )
        # )
        self.vertical_alignment = MainAxisAlignment.START
        self.horizontal_alignment = CrossAxisAlignment.CENTER
        self.spacing = 0

        self.logo = Container(
            width=36,
            height=36,
            border_radius=5,
            padding=0,
            alignment=alignment.center,
            image_src_base64=hiper_gif,
        )

        # Image(
        #     src_base64=fikoyt_logo,
        #     # width=200,
        #     height=32,
        #     fit=ImageFit.COVER,
        #     rotate=Rotate(angle=-0.05 * pi, alignment=alignment.center_left),
        # )

        # --->
        self.dosyaListesi = ListView(
            expand=1,
            spacing=5,
            padding=0,
            auto_scroll=False,
            divider_thickness=1,
        )

        self.ust_uyari = Text(
            "Sizin İçin Pusudayız",
            text_align=TextAlign.CENTER,
            overflow=TextOverflow.FADE,
        )
        # ---->
        self.controls = [
            Row(
                [
                    self.logo,
                    Column(
                        controls=[
                            Text(
                                "FikoYT Post Takipçisi v0.0.1",
                                text_align=TextAlign.CENTER,
                            ),
                            Text(
                                f"💠 {self.fikatia.aktifDokuman.ismi}",
                                text_align=TextAlign.CENTER,
                                overflow=TextOverflow.ELLIPSIS,
                                no_wrap=False,
                                max_lines=2,
                            ),
                        ],
                        spacing=0,
                    ),
                ],
                spacing=0,
                alignment=MainAxisAlignment.START,
                vertical_alignment=CrossAxisAlignment.START,
            ),
            Container(
                self.ust_uyari,
                shadow=ft.BoxShadow(
                    spread_radius=0,
                    blur_radius=3,
                    color=colors.BLUE_GREY_300,
                    offset=Offset(0, 0),
                    blur_style=ft.ShadowBlurStyle.OUTER,
                ),
                # width=24,
                padding=0,
                height=18,
                margin=2,
                alignment=alignment.center,
                bgcolor=colors.BLUE_100,
                border=border.all(1, colors.BLUE_400),
                border_radius=border_radius.all(0),
                ink=True,
            ),
            Container(
                Row(
                    # expand=1,
                    # spacing=2,
                    # padding=3,
                    # auto_scroll=False,
                    # divider_thickness=0,
                    # horizontal=True,
                    spacing=2,
                    controls=[
                        Tooltip(
                            message="Proje Klaösörünü Aç",
                            wait_duration=1000,
                            content=Container(
                                Text("📂"),
                                width=18,
                                height=18,
                                alignment=alignment.center,
                                # bgcolor=colors.BLUE_100,
                                # border=border.all(1, colors.BLUE_400),
                                border_radius=border_radius.all(5),
                                ink=True,
                                padding=0,
                                on_click=lambda e: self.klasorAc(),
                            ),
                        ),
                        Container(
                            Text("💾"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.projeKaydet(),
                        ),
                        VerticalDivider(width=2),
                        Container(
                            Text("📦"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        Container(
                            Text("🗑️"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        VerticalDivider(width=2),
                        Container(
                            Text("📼"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        Container(
                            Text("🧹"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        VerticalDivider(width=2),
                        Container(
                            Text("✍️"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        Container(expand=True),
                        Container(
                            Text("🧱"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.cikarFikoOpGl(),
                        ),
                        Container(
                            Text("🧿"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        Container(
                            Text("♻️"),
                            width=18,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(5),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                    ],
                ),
                height=24,
                padding=0,
            ),
            # Divider(height=0.5),
            Container(
                Row(
                    # expand=1,
                    # spacing=2,
                    # padding=3,
                    # auto_scroll=False,
                    # divider_thickness=0,
                    # horizontal=True,
                    spacing=2,
                    controls=[
                        Container(
                            Text("Nc Programlar"),
                            width=75,
                            height=18,
                            alignment=alignment.center,
                            bgcolor=colors.BLUE_100,
                            border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(1),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                        Container(
                            Text("Ayarlar"),
                            width=75,
                            height=18,
                            alignment=alignment.center,
                            # bgcolor=colors.BLUE_100,
                            # border=border.all(1, colors.BLUE_400),
                            border_radius=border_radius.all(1),
                            ink=True,
                            padding=0,
                            on_click=lambda e: self.bosInk(),
                        ),
                    ],
                ),
            ),
            Container(
                # height=32,
                content=TextField(
                    # label="My favorite color",
                    # icon=ft.icons.FORMAT_SIZE,
                    hint_text="Program İsmini Yazınız",
                    # helper_text="You can type only one color",
                    # counter_text="0 symbols typed",
                    # prefix_icon=ft.icons.COLOR_LENS,
                    # suffix_text="...is your color",
                    content_padding=6,
                    text_style=TextStyle(
                        size=10,
                    ),
                    hint_style=TextStyle(
                        size=10,
                    ),
                    label_style=TextStyle(
                        size=10,
                    ),
                    border_color=colors.GREY_400,
                    border_width=1,
                    dense=True,
                ),
                margin=4,
            ),
            self.dosyaListesi,
            Divider(height=0.5),
            ProgressBar(height=2, bar_height=2, value=50, color=colors.ORANGE_500),
            Row(
                [
                    Container(
                        Text(
                            "💎",
                            text_align=TextAlign.CENTER,
                        ),
                        width=48,
                        alignment=alignment.center,
                        # bgcolor=colors.BLUE_100,
                        border=border.all(1, colors.BLUE_400),
                        border_radius=border_radius.all(5),
                        ink=True,
                        margin=3,
                        padding=3,
                        on_click=lambda e: print(
                            "Clickable transparent with Ink clicked!"
                        ),
                    ),
                ],
                alignment=MainAxisAlignment.END,
                vertical_alignment=CrossAxisAlignment.CENTER,
                spacing=0,
            ),
            # AppBar(title=Text("Flet app")),
            # ElevatedButton(
            #     "Go to settings", on_click=lambda e: self.page.go("/settings/mail")
            # ),
        ]

        count = 1
        aktifDokuman = self.fikatia.aktifDokuman.asProcessDokuman
        for prg in self.tumProgramlar:
            # prg = self.tumProgramlar[i]
            self.dosyaListesi.controls.append(
                ProgramItem(prg, self.mainPage)
                # Container(
                #     Text(
                #         f"📑 {prg.ismi}",
                #         text_align=TextAlign.START,
                #         style=TextStyle(
                #             size=12, color=colors.BLACK12, weight=FontWeight.BOLD
                #         ),
                #     ),
                #     alignment=alignment.center_left,
                #     # bgcolor=colors.BLUE_100,
                #     # border=border.all(1, colors.BLUE_400),
                #     border_radius=border_radius.all(5),
                #     ink=True,
                #     on_click=lambda e: self.tiklandiProgram(prg),
                # ),
            )
            count += 1
        # --->

    def uyari_goster(self, uyari,renk=colors.BLUE_400, sure_sn=2.5):
        self.ust_uyari.value = uyari
        self.ust_uyari.color=renk
        self.update()
        sleep(sure_sn)
        self.ust_uyari.value="Sizin İçin Burdayız"
        self.ust_uyari.color=colors.BLUE_400
        self.update()

    def bosInk(self):
        pass

    def klasorAc(self):
        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
        self.fikatia.marshalOku()
        self.fikatia.aktifDokuman.klasoruAcSecimli()
        self.uyari_goster("Klasör Açıldı",colors.RED_400)
        pythoncom.CoUninitialize()

    def projeKaydet(self):
        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
        self.fikatia.aktifDokuman.kaydet()
        pythoncom.CoUninitialize()

    def cikarFikoOpGl(self):
        pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED)
        self.fikatia.aktifDokuman.asProcessDokuman.partOperasyonlari[0].fiko_op_gl_v1
        pythoncom.CoUninitialize()
