# ui/common.py
from PyQt6.QtWidgets import QFrame
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPainter, QColor #

class DragHandle(QFrame):
    """
    リストウィジェットの高さをドラッグで変更するためのハンドル。
    中央にグリップ（3本線）を描画し、視認性を向上させたデザイン。
    """
    def __init__(self, target_widget, parent=None):
        super().__init__(parent)
        self.target_widget = target_widget
        self.setFixedHeight(12) # 厚みを持たせて掴みやすくする
        self.setCursor(Qt.CursorShape.SplitVCursor)
        
        self.setStyleSheet("""
            QFrame {
                background-color: transparent;
                border: none;
            }
            QFrame:hover {
                background-color: rgba(0, 0, 0, 0.05);
            }
        """)
        
        self._is_dragging = False
        self._start_y = 0
        self._start_height = 0

    def paintEvent(self, event):
        """中央にグリップ（3本の短い横線）を描画"""
        super().paintEvent(event)
        painter = QPainter(self)
        painter.setRenderHint(QPainter.RenderHint.Antialiasing)
        
        color = QColor(160, 160, 160)
        if self.underMouse():
            color = QColor(100, 100, 100)
            
        painter.setPen(color)
        width = self.width()
        center_y = self.height() // 2
        center_x = width // 2
        
        for offset in [-4, 0, 4]:
            painter.drawLine(center_x - 15, center_y + offset - 1, 
                             center_x + 15, center_y + offset - 1)

    def enterEvent(self, event):
        self.update() # ホバー時の色変更を反映

    def leaveEvent(self, event):
        self.update()

    def mousePressEvent(self, event):
        if event.button() == Qt.MouseButton.LeftButton:
            self._is_dragging = True
            self._start_y = event.globalPosition().y()
            self._start_height = self.target_widget.height()
            self.setStyleSheet("background-color: rgba(0, 120, 215, 0.1);") # ドラッグ中のハイライト

    def mouseMoveEvent(self, event):
        if self._is_dragging:
            delta = event.globalPosition().y() - self._start_y
            new_height = max(50, self._start_height + delta)
            self.target_widget.setFixedHeight(int(new_height))

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.MouseButton.LeftButton:
            self._is_dragging = False
            self.setStyleSheet("QFrame:hover { background-color: rgba(0, 0, 0, 0.05); }")
            self.update()