import QtQuick
import QtQuick.Layouts

Rectangle {
    id: root

    property int    itemIndex: 0
    property string appName:  ""
    property string summary:  ""
    property string body:     ""
    property int    urgency:  0
    property string timeStr:  ""

    property var t
    property var urgencyColor: function(u) { return "#ffffff" }
    property var urgencyIcon:  function(u) { return "" }

    signal dismissed(int itemIndex)

    height: histItemContent.implicitHeight + 24
    radius: 12
    clip:   true 
    color:  histItemHover.hovered ? root.t.notifHistoryHover : "transparent"
    Behavior on color { ColorAnimation { duration: 150; easing.type: Easing.OutCubic } }

    HoverHandler { id: histItemHover }

    SequentialAnimation {
        id: dismissAnim
        ParallelAnimation {
            NumberAnimation { target: root; property: "opacity"; to: 0; duration: 150; easing.type: Easing.OutCubic }
            NumberAnimation { target: root; property: "scale"; to: 0.95; duration: 150; easing.type: Easing.OutCubic }
        }
        NumberAnimation { target: root; property: "height"; to: 0; duration: 150; easing.type: Easing.InOutQuad }
        ScriptAction { script: root.dismissed(root.itemIndex) }
    }

    Rectangle {
        width:  3
        height: Math.max(12, root.height - 24)
        radius: 1.5
        anchors { left: parent.left; leftMargin: 10; verticalCenter: parent.verticalCenter }
        color: root.urgencyColor(root.urgency)
    }

    Rectangle {
        anchors { right: parent.right; top: parent.top; margins: 8 }
        width: 22; height: 22; radius: 11
        color:   histCloseHover.hovered ? root.t.notifHistoryHover : "transparent"
        opacity: histItemHover.hovered ? 1 : 0
        Behavior on opacity { NumberAnimation { duration: 150 } }
        Behavior on color   { ColorAnimation  { duration: 150 } }

        Text { anchors.centerIn: parent; text: "✕"; color: root.t.notifToastText; font.pixelSize: 10 }
        HoverHandler { id: histCloseHover; cursorShape: Qt.PointingHandCursor }
        TapHandler   { onTapped: dismissAnim.start() }
    }

    ColumnLayout {
        id: histItemContent
        anchors { left: parent.left; right: parent.right; top: parent.top; leftMargin: 24; rightMargin: 36; topMargin: 12 }
        spacing: 4

        RowLayout {
            Layout.fillWidth: true; spacing: 5
            Text { text: root.urgencyIcon(root.urgency); color: root.urgencyColor(root.urgency); font.pixelSize: 11; Layout.alignment: Qt.AlignVCenter }
            Text {
                text: root.appName; color: root.t.notifToastAppName; font.pixelSize: 11; font.bold: true;
                font.capitalization: Font.AllUppercase; Layout.fillWidth: true; elide: Text.ElideRight; verticalAlignment: Text.AlignVCenter
            }
            Text { text: root.timeStr; color: root.t.notifToastDim; font.pixelSize: 11; verticalAlignment: Text.AlignVCenter }
        }

        Text {
            text: root.summary; color: root.t.notifToastText; font.pixelSize: 13; font.bold: true;
            Layout.fillWidth: true; elide: Text.ElideRight; textFormat: Text.PlainText; visible: root.summary !== ""
        }
        Text {
            text: root.body; color: root.t.notifToastDim; font.pixelSize: 12; Layout.fillWidth: true;
            wrapMode: Text.WordWrap; maximumLineCount: 2; elide: Text.ElideRight; textFormat: Text.PlainText; visible: root.body !== ""; lineHeight: 1.15
        }
    }
}
