# -*- coding: utf-8 -*-
"""
HUD Dashboard v7.0 - Complete Sci-Fi Interface with Sub-Routing
Full CRUD operations, data management, sub-pages
"""

import sys
import json
import math
import random
import uuid
from datetime import datetime, timedelta
from typing import Dict, List, Optional, Any
from dataclasses import dataclass, asdict

from PyQt6.QtWidgets import (
    QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
    QGridLayout, QLabel, QPushButton, QFrame, QScrollArea,
    QProgressBar, QStackedWidget, QSplitter, QTextEdit,
    QSpinBox, QDoubleSpinBox, QComboBox, QLineEdit, QCheckBox,
    QSlider, QGroupBox, QTableWidget, QTableWidgetItem,
    QHeaderView, QAbstractItemView, QMenu, QMenuBar,
    QStatusBar, QToolBar, QToolButton, QButtonGroup,
    QRadioButton, QTabWidget, QTreeWidgetItem, QTreeWidget,
    QGraphicsView, QGraphicsScene, QGraphicsOpacityEffect,
    QGraphicsDropShadowEffect, QSizePolicy, QSpacerItem,
    QGraphicsTextItem, QGraphicsRectItem, QMessageBox,
    QDialog, QFormLayout, QDialogButtonBox, QDateEdit,
    QFileDialog, QInputDialog
)
from PyQt6.QtCore import (
    Qt, QTimer, QThread, pyqtSignal, QPropertyAnimation,
    QEasingCurve, QParallelAnimationGroup, QSequentialAnimationGroup,
    QRect, QPointF, QSize, pyqtProperty, QUrl, QVariantAnimation,
    QTimeLine, QEvent, QEventLoop, QRectF, QThread, QDateTime
)
from PyQt6.QtGui import (
    QFont, QColor, QPalette, QLinearGradient, QRadialGradient,
    QPen, QBrush, QPainter, QPixmap, QIcon, QCursor,
    QPolygonF, QFontDatabase, QHoverEvent, QEnterEvent,
    QMouseEvent, QResizeEvent, QShowEvent, QPainterPath,
    QTransform, QFontMetrics, QConicalGradient, QKeySequence,
    QFontMetricsF, QTextCursor, QPainter, QBrush, QAction,
    QIntValidator, QDoubleValidator
)


# Data Models
@dataclass
class Proje:
    id: str
    ad: str
    musteri: str
    durum: str
    baslangic: datetime
    bitis: datetime
    bütce: float
    harcanan: float
    ilerleme: float
    sorumlu: str
    takim_uyeleri: List[str]
    oncelik: str
    risk_seviyesi: str
    aciklama: str = ""

@dataclass
class Siparis:
    id: str
    proje_id: str
    musteri: str
    urun_kodu: str
    urun_adi: str
    miktar: int
    birim_fiyat: float
    toplam_tutar: float
    siparis_tarihi: datetime
    teslim_tarihi: datetime
    durum: str
    odeme_durumu: str
    kargo_takip: str = ""
    notlar: str = ""

@dataclass
class Teklif:
    id: str
    musteri: str
    proje_adi: str
    konu: str
    tarih: datetime
    gecerlilik_tarihi: datetime
    durum: str
    toplam_tutar: float
    kdv: float
    indirim: float
    net_tutar: float
    temsilci: str
    ihtimal: float
    notlar: str = ""

@dataclass
class Makine:
    id: str
    ad: str
    tip: str
    durum: str
    mevcut_is: str
    verimlilik: float
    sıcaklık: float
    vibrasyon: float
    bakim_saati: float
    calisma_saati: float
    operasyon_sonrasi: float
    son_bakim: datetime


# Data Storage (In-memory database)
class DataStore:
    """Veri deposu"""

    def __init__(self):
        self.projeler = []
        self.siparisler = []
        self.teklifler = []
        self.makineler = []
        self.generateSampleData()

    def generateSampleData(self):
        """Örnek veriler oluştur"""
        # Projeler
        self.projeler = [
            Proje(
                id="PRJ-001", ad="Otomatik Vites Sistemi", musteri="OtoTek A.Ş.",
                durum="Üretim", baslangic=datetime.now() - timedelta(days=30),
                bitis=datetime.now() + timedelta(days=45), bütce=250000,
                harcanan=125000, ilerleme=65, sorumlu="Ahmet Demir",
                takim_uyeleri=["Mehmet Kaya", "Ali Yılmaz"], oncelik="Kritik",
                risk_seviyesi="Orta", aciklama="Yeni nesil otomatik şanzıman sistemi geliştirme projesi"
            ),
            Proje(
                id="PRJ-002", ad="Hidrolik Pres Kalıbı", musteri="PresMak Endüstri",
                durum="Tasarım", baslangic=datetime.now() - timedelta(days=15),
                bitis=datetime.now() + timedelta(days=60), bütce=180000,
                harcanan=45000, ilerleme=25, sorumlu="Mehmet Kaya",
                takim_uyeleri=["Ali Yılmaz", "Zeynep Ak"], oncelik="Yüksek",
                risk_seviyesi="Düşük", aciklama="Ağır hizmet hidrolik pres kalıbı tasarımı"
            ),
            Proje(
                id="PRJ-003", ad="Robotik Kol Montajı", musteri="RobotTech",
                durum="Montaj", baslangic=datetime.now() - timedelta(days=45),
                bitis=datetime.now() + timedelta(days=15), bütce=320000,
                harcanan=285000, ilerleme=90, sorumlu="Ali Yılmaz",
                takim_uyeleri=["Veli Can", "Hakan Bülent"], oncelik="Normal",
                risk_seviyesi="Düşük", aciklama="6 eksen robotik kol montaj ve test"
            ),
        ]

        # Makineler
        self.makineler = [
            Makine(
                id="CNC-001", ad="CNC İşleme Merkezi 1", tip="CNC 5 Eksen",
                durum="Çalışıyor", mevcut_is="PRJ-001 Parça A",
                verimlilik=87.5, sıcaklık=42.3, vibrasyon=0.85,
                bakim_saati=125.5, calisma_saati=3420.8, operasyon_sonrasi=45,
                son_bakim=datetime.now() - timedelta(days=30)
            ),
            Makine(
                id="CNC-002", ad="CNC İşleme Merkezi 2", tip="CNC 3 Eksen",
                durum="Boşta", mevcut_is="",
                verimlilik=0, sıcaklık=28.5, vibrasyon=0.12,
                bakim_saati=89.2, calisma_saati=2156.3, operasyon_sonrasi=0,
                son_bakim=datetime.now() - timedelta(days=15)
            ),
            Makine(
                id="FRZ-001", ad="Freze Tezgahı", tip="3 Eksen Freze",
                durum="Çalışıyor", mevcut_is="PRJ-002 Kalıp Üst",
                verimlilik=92.1, sıcaklık=45.7, vibrasyon=1.12,
                bakim_saati=56.8, calisma_saati=1890.5, operasyon_sonrasi=30,
                son_bakim=datetime.now() - timedelta(days=7)
            ),
        ]

        # Siparişler
        for i in range(10):
            self.siparisler.append(
                Siparis(
                    id=f"SIP-2024-{i+1:03d}",
                    proje_id=random.choice([p.id for p in self.projeler]),
                    musteri=random.choice(["OtoTek A.Ş.", "PresMak Endüstri", "RobotTech", "MedTech"]),
                    urun_kodu=f"UR-{1000+i}",
                    urun_adi=f"Parça {i+1}",
                    miktar=random.randint(10, 100),
                    birim_fiyat=random.uniform(100, 5000),
                    toplam_tutar=0,
                    siparis_tarihi=datetime.now() - timedelta(days=random.randint(1, 30)),
                    teslim_tarihi=datetime.now() + timedelta(days=random.randint(10, 60)),
                    durum=random.choice(["Bekliyor", "Üretimde", "Kargoda", "Teslim Edildi"]),
                    odeme_durumu=random.choice(["Ödenmedi", "Kısmi Ödeme", "Ödendi"]),
                    kargo_takip=f"TR{random.randint(100000000, 999999999)}" if random.random() > 0.5 else ""
                )
            )
            self.siparisler[-1].toplam_tutar = self.siparisler[-1].miktar * self.siparisler[-1].birim_fiyat

        # Teklifler
        for i in range(8):
            toplam = random.uniform(50000, 500000)
            kdv = toplam * 0.18
            indirim = random.uniform(0, 50000)
            self.teklifler.append(
                Teklif(
                    id=f"TKF-2024-{i+1:03d}",
                    musteri=random.choice(["TechCorp", "AeroSpace", "MedTech", "AutoParts"]),
                    proje_adi=f"Proje {i+1}",
                    konu=f"Özel üretim talebi {i+1}",
                    tarih=datetime.now() - timedelta(days=random.randint(1, 20)),
                    gecerlilik_tarihi=datetime.now() + timedelta(days=random.randint(10, 30)),
                    durum=random.choice(["Beklemede", "Gönderildi", "Kabul", "Red"]),
                    toplam_tutar=toplam,
                    kdv=kdv,
                    indirim=indirim,
                    net_tutar=toplam + kdv - indirim,
                    temsilci=random.choice(["Ahmet Demir", "Mehmet Kaya", "Ali Yılmaz", "Veli Can"]),
                    ihtimal=random.randint(20, 95)
                )
            )


# Global data store
data_store = DataStore()


class CyberButton(QPushButton):
    """Cyberpunk buton"""

    def __init__(self, text, color="#00ff00", size="normal"):
        super().__init__(text)
        self.color = QColor(color)
        self.setupStyle(size)
        self.startGlitch()

    def setupStyle(self, size="normal"):
        sizes = {
            "small": ("9px", "4px 8px", "25px"),
            "normal": ("11px", "6px 12px", "30px"),
            "large": ("13px", "8px 16px", "35px")
        }
        font_size, padding, height = sizes.get(size, sizes["normal"])

        self.setStyleSheet(f"""
            CyberButton {{
                background: #000000;
                border: 1px solid {self.color.name()};
                color: {self.color.name()};
                font-family: 'Consolas', monospace;
                font-size: {font_size};
                font-weight: bold;
                padding: {padding};
                text-transform: uppercase;
                letter-spacing: 1px;
                min-height: {height};
            }}
            CyberButton:hover {{
                background: rgba({self.color.red()}, {self.color.green()}, {self.color.blue()}, 30);
                border: 1px solid rgba({self.color.red()}, {self.color.green()}, {self.color.blue()}, 255);
                text-shadow: 0 0 5px {self.color.name()};
            }}
        """)

    def startGlitch(self):
        self.glitch_timer = QTimer()
        self.glitch_timer.timeout.connect(self.glitch)
        self.glitch_timer.start(300)

    def glitch(self):
        if random.random() < 0.05:
            original = self.text()
            self.setText("█" + original)
            QTimer.singleShot(100, lambda: self.setText(original))


class NanoCard(QFrame):
    """Nano kart widget"""

    def __init__(self, title, value, color="#00ff00"):
        super().__init__()
        self.color = QColor(color)
        self.title = title
        self.value = value
        self.setupStyle()
        self.addEffects()

    def setupStyle(self):
        self.setFixedSize(160, 70)
        self.setFrameStyle(QFrame.Shape.Box)

        self.setStyleSheet(f"""
            NanoCard {{
                background: #000000;
                border: 1px solid {self.color.name()};
                padding: 8px;
            }}
        """)

        layout = QVBoxLayout()
        layout.setSpacing(3)
        layout.setContentsMargins(10, 8, 10, 8)

        title_label = QLabel(self.title)
        title_label.setStyleSheet(f"""
            color: {self.color.name()};
            font-family: 'Consolas', monospace;
            font-size: 10px;
            font-weight: bold;
            text-transform: uppercase;
        """)
        layout.addWidget(title_label)

        value_label = QLabel(self.value)
        value_label.setStyleSheet(f"""
            color: #ffffff;
            font-family: 'Orbitron', monospace;
            font-size: 20px;
            font-weight: bold;
        """)
        layout.addWidget(value_label)

        self.setLayout(layout)

    def addEffects(self):
        self.scan_timer = QTimer()
        self.scan_pos = 0
        self.scan_timer.timeout.connect(self.scan)
        self.scan_timer.start(100)

    def scan(self):
        self.scan_pos = (self.scan_pos + 5) % self.height()
        self.update()

    def paintEvent(self, event):
        super().paintEvent(event)
        painter = QPainter(self)
        scan_color = QColor(self.color)
        scan_color.setAlpha(100)
        painter.setPen(QPen(scan_color, 1))
        painter.drawLine(0, self.scan_pos, self.width(), self.scan_pos)


class CyberTerminal(QTextEdit):
    """Terminal widget"""

    def __init__(self, module="SYSTEM"):
        super().__init__()
        self.module = module
        self.setupStyle()
        self.startTerminalOutput()

    def setupStyle(self):
        self.setReadOnly(True)
        self.setMaximumHeight(150)
        self.setStyleSheet(f"""
            CyberTerminal {{
                background: #000000;
                color: #00ff00;
                border: 1px solid #00ff00;
                font-family: 'Consolas', monospace;
                font-size: 10px;
                padding: 8px;
            }}
        """)

    def startTerminalOutput(self):
        self.terminal_timer = QTimer()
        self.lines = []
        self.terminal_timer.timeout.connect(self.addLine)
        self.terminal_timer.start(2000)

        # Initial content
        initial = f"""
root@fikatia:~$ ./{self.module.lower()}_monitor.sh
[INIT] {self.module} interface online
[SCAN] Loading modules...
        """.strip()
        self.setPlainText(initial)

    def addLine(self):
        timestamp = datetime.now().strftime("%H:%M:%S")
        messages = {
            "SYSTEM": [
                f"[{timestamp}] All systems nominal",
                f"[{timestamp}] Backup completed",
                f"[{timestamp}] Security scan: Clean",
                f"[{timestamp}] Performance: Optimal",
            ],
            "CNC": [
                f"[{timestamp}] CNC-001: Running at 94%",
                f"[{timestamp}] Tool change: Completed",
                f"[{timestamp}] Maintenance schedule: Updated",
                f"[{timestamp}] Production target: 85%",
            ],
            "PRODUCTION": [
                f"[{timestamp}] Job queue: 12 active",
                f"[{timestamp}] Efficiency: 92%",
                f"[{timestamp}] Quality check: Passed",
                f"[{timestamp}] Next job: PRJ-002",
            ],
            "PROJECT": [
                f"[{timestamp}] PRJ-001: 65% complete",
                f"[{timestamp}] Resource allocation: OK",
                f"[{timestamp}] Timeline: On track",
                f"[{timestamp}] Budget: 50% used",
            ],
            "ORDER": [
                f"[{timestamp}] New order: SIP-2024-999",
                f"[{timestamp}] Shipment: Delivered",
                f"[{timestamp}] Payment: Received",
                f"[{timestamp}] Inventory: Updated",
            ],
            "QUOTE": [
                f"[{timestamp}] Quote sent: TKF-2024-888",
                f"[{timestamp}] Follow-up: Scheduled",
                f"[{timestamp}] Conversion rate: 67%",
                f"[{timestamp}] Pipeline: $2.4M",
            ],
            "ANALYTICS": [
                f"[{timestamp}] Report generated: Daily",
                f"[{timestamp}] KPI targets: Met",
                f"[{timestamp}] Forecast: Positive",
                f"[{timestamp}] Analysis: Complete",
            ],
            "ADMIN": [
                f"[{timestamp}] User login: admin",
                f"[{timestamp}] System update: Available",
                f"[{timestamp}] Backup status: Complete",
                f"[{timestamp}] Security: All clear",
            ]
        }

        module_messages = messages.get(self.module, messages["SYSTEM"])
        new_line = random.choice(module_messages)

        cursor = self.textCursor()
        cursor.movePosition(QTextCursor.MoveOperation.End)
        cursor.insertText("\n" + new_line)

        lines = self.toPlainText().split('\n')
        if len(lines) > 12:
            self.setPlainText('\n'.join(lines[-12:]))


class AddProjeDialog(QDialog):
    """Proje ekleme dialogu"""

    def __init__(self, parent=None):
        super().__init__(parent)
        self.proje = None
        self.setupUI()

    def setupUI(self):
        self.setWindowTitle("[YENİ PROJE]")
        self.setFixedSize(500, 600)
        self.setStyleSheet("""
            QDialog {
                background: #000000;
                color: #00ff00;
                font-family: 'Consolas', monospace;
            }
            QLabel {
                color: #00ff00;
                font-size: 11px;
                padding: 2px;
            }
            QLineEdit, QComboBox, QDateEdit, QTextEdit {
                background: #000000;
                border: 1px solid #00ff00;
                color: #00ff00;
                padding: 4px;
                font-family: 'Consolas', monospace;
                font-size: 10px;
            }
            QSpinBox, QDoubleSpinBox {
                background: #000000;
                border: 1px solid #00ff00;
                color: #00ff00;
                padding: 4px;
            }
        """)

        layout = QVBoxLayout()

        # Header
        header = QLabel("┌─ YENİ PROJE EKLE ─┐")
        header.setStyleSheet("color: #00ff00; font-size: 14px; font-weight: bold; padding: 10px;")
        layout.addWidget(header)

        # Form
        form_layout = QFormLayout()

        self.ad_edit = QLineEdit()
        self.musteri_edit = QLineEdit()
        self.durum_combo = QComboBox()
        self.durum_combo.addItems(["Planlama", "Tasarım", "Üretim", "Montaj", "Test", "Teslim"])
        self.baslangic_edit = QDateEdit()
        self.baslangic_edit.setDate(datetime.now().date())
        self.bitis_edit = QDateEdit()
        self.bitis_edit.setDate(datetime.now().date() + timedelta(days=30))
        self.butce_edit = QDoubleSpinBox()
        self.butce_edit.setRange(0, 9999999)
        self.butce_edit.setValue(100000)
        self.sorumlu_edit = QLineEdit()
        self.oncelik_combo = QComboBox()
        self.oncelik_combo.addItems(["Düşük", "Normal", "Yüksek", "Kritik"])
        self.risk_combo = QComboBox()
        self.risk_combo.addItems(["Düşük", "Orta", "Yüksek"])
        self.aciklama_edit = QTextEdit()
        self.aciklama_edit.setMaximumHeight(100)

        form_layout.addRow("Proje Adı:", self.ad_edit)
        form_layout.addRow("Müşteri:", self.musteri_edit)
        form_layout.addRow("Durum:", self.durum_combo)
        form_layout.addRow("Başlangıç:", self.baslangis_edit)
        form_layout.addRow("Bitiş:", self.bitis_edit)
        form_layout.addRow("Bütçe:", self.butce_edit)
        form_layout.addRow("Sorumlu:", self.sorumlu_edit)
        form_layout.addRow("Öncelik:", self.oncelik_combo)
        form_layout.addRow("Risk:", self.risk_combo)
        form_layout.addRow("Açıklama:", self.aciklama_edit)

        layout.addLayout(form_layout)

        # Buttons
        button_layout = QHBoxLayout()
        btn_kaydet = CyberButton("KAYDET", "#00ff00")
        btn_iptal = CyberButton("İPTAL", "#ff0000")
        btn_kaydet.clicked.connect(self.accept)
        btn_iptal.clicked.connect(self.reject)
        button_layout.addWidget(btn_iptal)
        button_layout.addStretch()
        button_layout.addWidget(btn_kaydet)
        layout.addLayout(button_layout)

        self.setLayout(layout)

    def getProje(self):
        if self.result() == QDialog.DialogCode.Accepted:
            return Proje(
                id=f"PRJ-{datetime.now().strftime('%Y%m%d%H%M%S')}",
                ad=self.ad_edit.text(),
                musteri=self.musteri_edit.text(),
                durum=self.durum_combo.currentText(),
                baslangic=datetime.combine(self.baslangis_edit.date(), datetime.min.time()),
                bitis=datetime.combine(self.bitis_edit.date(), datetime.min.time()),
                bütce=self.butce_edit.value(),
                harcanan=0,
                ilerleme=0,
                sorumlu=self.sorumlu_edit.text(),
                takim_uyeleri=[],
                oncelik=self.oncelik_combo.currentText(),
                risk_seviyesi=self.risk_combo.currentText(),
                aciklama=self.aciklama_edit.toPlainText()
            )
        return None


class CNCPage(QWidget):
    """CNC Takip sayfası"""

    def __init__(self):
        super().__init__()
        self.current_sub_page = "overview"
        self.setupUI()

    def setupUI(self):
        main_layout = QVBoxLayout()
        main_layout.setContentsMargins(15, 15, 15, 15)
        main_layout.setSpacing(10)

        # Header
        header = self.createHeader("CNC CONTROL MODULE", "#00ffff")
        main_layout.addWidget(header)

        # Stats row
        stats_row = QHBoxLayout()
        stats_row.setSpacing(10)
        cnc_stats = [
            ("ACTIVE", str(sum(1 for m in data_store.makineler if m.durum == "Çalışıyor")), "#00ffff"),
            ("IDLE", str(sum(1 for m in data_store.makineler if m.durum == "Boşta")), "#ffff00"),
            ("MAINT", str(sum(1 for m in data_store.makineler if m.durum == "Bakımda")), "#ff8800"),
            ("AVG_EFF", f"{sum(m.verimlilik for m in data_store.makineler if m.durum == 'Çalışıyor') / max(1, sum(1 for m in data_store.makineler if m.durum == 'Çalışıyor')):.1f}%", "#00ff00"),
        ]
        for title, value, color in cnc_stats:
            card = NanoCard(title, value, color)
            stats_row.addWidget(card)
        main_layout.addLayout(stats_row)

        # Sub-navigation
        sub_nav = QHBoxLayout()
        sub_nav_buttons = [
            ("OVERVIEW", "overview", "#00ffff"),
            ("MACHINES", "machines", "#00ff00"),
            ("SCHEDULE", "schedule", "#ff00ff"),
            ("MAINTENANCE", "maintenance", "#ffff00"),
            ("REPORTS", "reports", "#ff8800"),
        ]
        for text, page, color in sub_nav_buttons:
            btn = CyberButton(text, color, "small")
            btn.clicked.connect(lambda checked, p=page: self.navigateToSubPage(p))
            if self.current_sub_page == page:
                btn.setStyleSheet(btn.styleSheet() + "background: rgba(0, 255, 0, 30);")
            sub_nav.addWidget(btn)
        sub_nav.addStretch()
        main_layout.addLayout(sub_nav)

        # Sub-content area
        self.sub_content = QStackedWidget()
        self.sub_content.setStyleSheet("background: #000000; border: 1px solid #00ffff;")

        # Overview page
        overview_page = QWidget()
        overview_layout = QVBoxLayout()

        # Terminal
        terminal = CyberTerminal("CNC")
        overview_layout.addWidget(terminal)

        # Quick stats
        quick_stats = QGridLayout()
        quick_stats.setSpacing(5)
        for i, makine in enumerate(data_store.makineler[:4]):
            frame = QFrame()
            frame.setStyleSheet("background: #000000; border: 1px solid #00ffff; padding: 8px;")
            layout = QVBoxLayout()
            name = QLabel(makine.ad)
            name.setStyleSheet("color: #00ffff; font-size: 11px; font-weight: bold;")
            layout.addWidget(name)
            status = QLabel(f"Status: {makine.durum}")
            status_color = {"Çalışıyor": "#00ff00", "Boşta": "#ffff00", "Bakımda": "#ff8800"}[makine.durum]
            status.setStyleSheet(f"color: {status_color}; font-size: 10px;")
            layout.addWidget(status)
            frame.setLayout(layout)
            quick_stats.addWidget(frame, i // 2, i % 2)
        overview_layout.addLayout(quick_stats)
        overview_page.setLayout(overview_layout)
        self.sub_content.addWidget(overview_page)

        # Machines page
        machines_page = QWidget()
        machines_layout = QVBoxLayout()

        # Action buttons
        actions = QHBoxLayout()
        btn_ekle = CyberButton("YENİ MAKİNE", "#00ff00")
        btn_duzenle = CyberButton("DÜZENLE", "#ffff00")
        btn_sil = CyberButton("SİL", "#ff0000")
        actions.addWidget(btn_ekle)
        actions.addWidget(btn_duzenle)
        actions.addWidget(btn_sil)
        actions.addStretch()
        machines_layout.addLayout(actions)

        # Machines table
        self.machines_table = QTableWidget()
        self.machines_table.setColumnCount(9)
        self.machines_table.setHorizontalHeaderLabels([
            "ID", "AD", "TİP", "DURUM", "MEVCUT İŞ", "VERİMLİLİK", "SICAKLIK", "VİBRASYON", "İŞLEMLER"
        ])
        self.updateMachinesTable()
        machines_layout.addWidget(self.machines_table)
        machines_page.setLayout(machines_layout)
        self.sub_content.addWidget(machines_page)

        # Schedule page
        schedule_page = QWidget()
        schedule_layout = QVBoxLayout()
        schedule_label = QLabel("SCHEDULE MODULE - Under Construction")
        schedule_label.setStyleSheet("color: #00ffff; font-size: 24px; text-align: center;")
        schedule_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        schedule_layout.addWidget(schedule_label)
        schedule_page.setLayout(schedule_layout)
        self.sub_content.addWidget(schedule_page)

        # Maintenance page
        maintenance_page = QWidget()
        maintenance_layout = QVBoxLayout()
        maintenance_label = QLabel("MAINTENANCE MODULE - Under Construction")
        maintenance_label.setStyleSheet("color: #ffff00; font-size: 24px; text-align: center;")
        maintenance_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        maintenance_layout.addWidget(maintenance_label)
        maintenance_page.setLayout(maintenance_layout)
        self.sub_content.addWidget(maintenance_page)

        # Reports page
        reports_page = QWidget()
        reports_layout = QVBoxLayout()
        reports_label = QLabel("REPORTS MODULE - Under Construction")
        reports_label.setStyleSheet("color: #ff8800; font-size: 24px; text-align: center;")
        reports_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        reports_layout.addWidget(reports_label)
        reports_page.setLayout(reports_layout)
        self.sub_content.addWidget(reports_page)

        main_layout.addWidget(self.sub_content)
        self.setLayout(main_layout)

    def createHeader(self, title, color):
        header = QFrame()
        header.setStyleSheet(f"""
            QFrame {{
                background: #000000;
                border: 1px solid {color};
                padding: 8px;
            }}
        """)
        header_layout = QHBoxLayout()
        title_label = QLabel(f"┌─ {title} ─┐")
        title_label.setStyleSheet(f"color: {color}; font-size: 11px; font-weight: bold;")
        header_layout.addWidget(title_label)
        header_layout.addStretch()
        header.setLayout(header_layout)
        return header

    def updateMachinesTable(self):
        """Makine tablosunu güncelle"""
        self.machines_table.setRowCount(len(data_store.makineler))

        for row, makine in enumerate(data_store.makineler):
            self.machines_table.setItem(row, 0, QTableWidgetItem(makine.id))
            self.machines_table.setItem(row, 1, QTableWidgetItem(makine.ad))
            self.machines_table.setItem(row, 2, QTableWidgetItem(makine.tip))
            self.machines_table.setItem(row, 3, QTableWidgetItem(makine.durum))
            self.machines_table.setItem(row, 4, QTableWidgetItem(makine.mevcut_is))
            self.machines_table.setItem(row, 5, QTableWidgetItem(f"{makine.verimlilik:.1f}%"))
            self.machines_table.setItem(row, 6, QTableWidgetItem(f"{makine.sıcaklık:.1f}°C"))
            self.machines_table.setItem(row, 7, QTableWidgetItem(f"{makine.vibrasyon:.2f}g"))

            # İşlemler butonu
            btn_widget = QWidget()
            btn_layout = QHBoxLayout()
            btn_duzenle = CyberButton("DÜZENLE", "#ffff00", "small")
            btn_sil = CyberButton("SİL", "#ff0000", "small")
            btn_layout.addWidget(btn_duzenle)
            btn_layout.addWidget(btn_sil)
            btn_widget.setLayout(btn_layout)
            self.machines_table.setCellWidget(row, 8, btn_widget)

        self.machines_table.setStyleSheet("""
            QTableWidget {
                background: #000000;
                color: #00ff00;
                gridline-color: #00ff00;
                selection-background-color: rgba(0, 255, 0, 30);
            }
            QTableWidget::item {
                padding: 5px;
                border-bottom: 1px solid #003300;
            }
            QHeaderView::section {
                background: #001100;
                color: #00ff00;
                padding: 5px;
                border: 1px solid #00ff00;
                font-weight: bold;
            }
        """)

    def navigateToSubPage(self, page):
        """Alt sayfaya git"""
        self.current_sub_page = page
        self.sub_content.setCurrentIndex(["overview", "machines", "schedule", "maintenance", "reports"].index(page))


# Diğer sayfa sınıfları benzer şekilde oluşturulacak...
# UretimPage, ProjelerPage, SiparislerPage, TekliflerPage, AnalizPage, AdminPage


class MatrixSidebar(QWidget):
    """Matrix rain sidebar"""

    menuItemSelected = pyqtSignal(str)

    def __init__(self):
        super().__init__()
        self.selected_item = "dashboard"
        self.matrix_chars = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        self.setupUI()
        self.startMatrix()

    def setupUI(self):
        self.setFixedWidth(180)
        self.setStyleSheet("""
            MatrixSidebar {
                background: #000000;
                border-right: 2px solid #00ff00;
            }
        """)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        # Logo
        logo = QLabel("[FIKATIA]")
        logo.setStyleSheet("""
            color: #00ff00;
            font-family: 'Consolas', monospace;
            font-size: 14px;
            font-weight: bold;
            padding: 12px;
            text-align: center;
            text-transform: uppercase;
        """)
        logo.setAlignment(Qt.AlignmentFlag.AlignCenter)
        layout.addWidget(logo)

        # Separator
        sep = QLabel("═" * 22)
        sep.setStyleSheet("color: #003300; font-size: 8px;")
        sep.setAlignment(Qt.AlignmentFlag.AlignCenter)
        layout.addWidget(sep)

        # Menu items
        menu_items = [
            ("dashboard", "DASHBOARD", "#00ff00"),
            ("cnc", "CNC.TAKIP", "#00ffff"),
            ("uretim", "ÜRETİM", "#ff00ff"),
            ("projeler", "PROJELER", "#ffff00"),
            ("siparisler", "SİPARİSLER", "#ff8800"),
            ("teklifler", "TEKLİFLER", "#00ffaa"),
            ("analiz", "ANALİZ", "#ff0088"),
            ("admin", "ADMIN", "#8800ff"),
        ]

        self.menu_buttons = []
        for item_id, text, color in menu_items:
            btn = MatrixMenuButton(text, color, item_id == self.selected_item)
            btn.clicked.connect(lambda checked, mid=item_id: self.onMenuClick(mid))
            self.menu_buttons.append(btn)
            layout.addWidget(btn)

        layout.addStretch()

        # Status
        status = QLabel("[ONLINE]")
        status.setStyleSheet("""
            color: #00ff00;
            font-family: 'Consolas', monospace;
            font-size: 10px;
            padding: 8px;
            text-align: center;
        """)
        layout.addWidget(status)

        # Version
        version = QLabel("v2.0.1")
        version.setStyleSheet("color: #003300; font-size: 8px; text-align: center;")
        version.setAlignment(Qt.AlignmentFlag.AlignCenter)
        layout.addWidget(version)

        self.setLayout(layout)

    def startMatrix(self):
        self.matrix_timer = QTimer()
        self.matrix_drops = []
        self.matrix_timer.timeout.connect(self.matrixDrop)
        self.matrix_timer.start(100)

    def matrixDrop(self):
        if random.random() < 0.3:
            x = random.randint(0, 17)
            char = random.choice(self.matrix_chars)
            self.matrix_drops.append({'x': x, 'y': 0, 'char': char, 'life': 20})

    def onMenuClick(self, menu_id):
        self.selected_item = menu_id
        self.menuItemSelected.emit(menu_id)

        # Update button styles
        for i, (mid, _, _) in enumerate([
            ("dashboard", "", ""), ("cnc", "", ""),
            ("uretim", "", ""), ("projeler", "", ""),
            ("siparisler", "", ""), ("teklifler", "", ""),
            ("analiz", "", ""), ("admin", "", "")
        ]):
            if mid == menu_id:
                self.menu_buttons[i].set_selected(True)
            else:
                self.menu_buttons[i].set_selected(False)


class MatrixMenuButton(QPushButton):
    """Matrix menü butonu"""

    def __init__(self, text, color="#00ff00", selected=False):
        super().__init__(text)
        self.color = QColor(color)
        self.selected = selected
        self.setupStyle()

    def setupStyle(self):
        if self.selected:
            bg = f"rgba({self.color.red()}, {self.color.green()}, {self.color.blue()}, 50)"
            text = self.color.name()
        else:
            bg = "transparent"
            text = "rgba(255, 255, 255, 100)"

        self.setStyleSheet(f"""
            MatrixMenuButton {{
                background: {bg};
                border: none;
                border-left: 3px solid rgba({self.color.red()}, {self.color.green()}, {self.color.blue()}, 200);
                color: {text};
                font-family: 'Consolas', monospace;
                font-size: 11px;
                font-weight: bold;
                padding: 10px 18px;
                text-align: left;
                text-transform: uppercase;
            }}
            MatrixMenuButton:hover {{
                background: rgba({self.color.red()}, {self.color.green()}, {self.color.blue()}, 30);
                color: #ffffff;
            }}
        """)

    def set_selected(self, selected):
        self.selected = selected
        self.setupStyle()


class HUDDashboard(QMainWindow):
    """Ana Dashboard"""

    def __init__(self):
        super().__init__()
        self.current_page = "dashboard"
        self.setupUI()
        self.addCyberEffects()

    def setupUI(self):
        self.setWindowTitle("[F.I.K.A.T.I.A] - NEURAL INTERFACE v2.0.1")
        self.showMaximized()
        self.setMinimumSize(1200, 800)

        # Black theme
        self.setStyleSheet("""
            QMainWindow {
                background: #000000;
            }
            QWidget {
                font-family: 'Consolas', monospace;
                color: rgba(255, 255, 255, 200);
            }
            QScrollArea {
                background: #000000;
                border: none;
            }
            QScrollBar:vertical {
                background: #000000;
                width: 8px;
                border: 1px solid rgba(0, 255, 0, 50);
            }
            QScrollBar::handle:vertical {
                background: #00ff00;
                min-height: 10px;
            }
        """)

        central_widget = QWidget()
        self.setCentralWidget(central_widget)

        main_layout = QHBoxLayout()
        main_layout.setContentsMargins(0, 0, 0, 0)
        main_layout.setSpacing(0)

        # Sidebar
        self.sidebar = MatrixSidebar()
        self.sidebar.menuItemSelected.connect(self.navigateToPage)
        main_layout.addWidget(self.sidebar)

        # İçerik
        self.content_stack = QStackedWidget()
        self.content_stack.setStyleSheet("background: #000000;")
        self.createPages()

        main_layout.addWidget(self.content_stack)
        central_widget.setLayout(main_layout)

    def createPages(self):
        """Sayfaları oluştur"""
        # Dashboard
        dashboard_container = QWidget()
        dashboard_scroll = QScrollArea()
        dashboard_scroll.setWidgetResizable(True)
        dashboard_scroll.setWidget(self.createDashboardPage())
        dashboard_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)

        dashboard_container.setLayout(QVBoxLayout())
        dashboard_container.layout().addWidget(dashboard_scroll)
        dashboard_container.layout().setContentsMargins(0, 0, 0, 0)
        self.content_stack.addWidget(dashboard_container)

        # CNC Page
        cnc_container = QWidget()
        cnc_scroll = QScrollArea()
        cnc_scroll.setWidgetResizable(True)
        cnc_scroll.setWidget(CNCPage())
        cnc_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
        cnc_container.setLayout(QVBoxLayout())
        cnc_container.layout().addWidget(cnc_scroll)
        cnc_container.layout().setContentsMargins(0, 0, 0, 0)
        self.content_stack.addWidget(cnc_container)

        # Diğer sayfalar için placeholder
        for i in range(6):
            empty_page = QWidget()
            layout = QVBoxLayout()
            label = QLabel(f"MODULE {i+3} - LOADING...")
            label.setStyleSheet("color: #00ff00; font-size: 20px; text-align: center;")
            label.setAlignment(Qt.AlignmentFlag.AlignCenter)
            layout.addWidget(label)
            empty_page.setLayout(layout)
            self.content_stack.addWidget(empty_page)

    def createDashboardPage(self):
        """Dashboard sayfası"""
        page = QWidget()
        main_layout = QVBoxLayout()
        main_layout.setContentsMargins(15, 15, 15, 15)
        main_layout.setSpacing(10)

        # Header
        header = QFrame()
        header.setStyleSheet("""
            QFrame {
                background: #000000;
                border: 1px solid #00ff00;
                padding: 8px;
            }
        """)

        header_layout = QHBoxLayout()
        ascii_header = QLabel("┌─ SYSTEM CONTROL ─┐")
        ascii_header.setStyleSheet("""
            color: #00ff00;
            font-family: 'Consolas', monospace;
            font-size: 12px;
            font-weight: bold;
        """)
        header_layout.addWidget(ascii_header)

        header_layout.addStretch()

        status = QLabel(f"[ONLINE] {datetime.now().strftime('%H:%M:%S')}")
        status.setStyleSheet("color: #00ff00; font-size: 10px;")
        header_layout.addWidget(status)

        header.setLayout(header_layout)
        main_layout.addWidget(header)

        # Stats rows
        stats1 = QHBoxLayout()
        stats1.setSpacing(8)

        cards1 = [
            ("PROJECTS", str(len(data_store.projeler)), "#00ff00"),
            ("ACTIVE", str(sum(1 for p in data_store.projeler if p.durum in ["Üretim", "Montaj"])), "#00ffff"),
            ("PENDING", str(sum(1 for p in data_store.projeler if p.durum in ["Planlama", "Tasarım"])), "#ff00ff"),
            ("EFFICIENCY", "94%", "#ffff00"),
            ("MACHINES", f"{sum(1 for m in data_store.makineler if m.durum == 'Çalışiyor')}/{len(data_store.makineler)}", "#ff8800"),
            ("ALERTS", "2", "#ff0000"),
        ]

        for title, value, color in cards1:
            card = NanoCard(title, value, color)
            stats1.addWidget(card)

        main_layout.addLayout(stats1)

        # Terminal
        terminal_frame = QFrame()
        terminal_frame.setStyleSheet("""
            QFrame {
                background: #000000;
                border: 1px solid #00ff00;
                padding: 4px;
            }
        """)

        term_header = QLabel("[TERMINAL] Real-time Monitor")
        term_header.setStyleSheet("""
            color: #00ff00;
            font-size: 10px;
            font-weight: bold;
            padding: 4px;
        """)

        terminal = CyberTerminal()
        terminal_layout = QVBoxLayout()
        terminal_layout.setContentsMargins(0, 0, 0, 0)
        terminal_layout.setSpacing(0)
        terminal_layout.addWidget(term_header)
        terminal_layout.addWidget(terminal)
        terminal_frame.setLayout(terminal_layout)

        main_layout.addWidget(terminal_frame)

        # Action buttons
        actions = QHBoxLayout()
        actions.setSpacing(5)

        btn_actions = [
            ("NEW_JOB", "#00ff00"),
            ("SCAN", "#00ffff"),
            ("MAINT", "#ff00ff"),
            ("ALERT", "#ff0000"),
            ("SYNC", "#ffff00"),
        ]

        for text, color in btn_actions:
            btn = CyberButton(text, color)
            btn.setMinimumHeight(35)
            actions.addWidget(btn)

        actions.addStretch()
        main_layout.addLayout(actions)

        main_layout.addStretch()
        page.setLayout(main_layout)

        return page

    def navigateToPage(self, page_id):
        """Sayfa geçişi"""
        self.current_page = page_id
        page_map = {
            "dashboard": 0,
            "cnc": 1,
            "uretim": 2,
            "projeler": 3,
            "siparisler": 4,
            "teklifler": 5,
            "analiz": 6,
            "admin": 7
        }

        if page_id in page_map:
            self.content_stack.setCurrentIndex(page_map[page_id])

    def addCyberEffects(self):
        """Cyber efektleri"""
        self.flicker_timer = QTimer()
        self.flicker_timer.timeout.connect(self.flicker)
        self.flicker_timer.start(5000)

    def flicker(self):
        if random.random() < 0.1:
            self.setStyleSheet("background: #080808;")
            QTimer.singleShot(50, lambda: self.setStyleSheet("background: #000000;"))


def main():
    app = QApplication(sys.argv)
    app.setStyle('Fusion')

    # Font
    font = QFont("Consolas", 11)
    app.setFont(font)

    window = HUDDashboard()
    window.showMaximized()

    sys.exit(app.exec())


if __name__ == "__main__":
    main()