import QtQuick
import QtQuick.Shapes
import qs.Constants

Shape {
    id: root

    property string position: "topleft" // Corner position: topleft/topright/bottomleft/bottomright
    property real size: 1 // Scale multiplier for entire corner
    property int concaveWidth: 100 * size
    property int concaveHeight: 60 * size
    property int offsetX: -20
    property int offsetY: -20
    property color fillColor: Colors.base
    property int arcRadius: 20 * size
    property var modelData: null
    // Position flags derived from position string
    property bool _isTop: position.includes("top")
    property bool _isLeft: position.includes("left")
    property bool _isRight: position.includes("right")
    property bool _isBottom: position.includes("bottom")
    // Shift the path vertically if offsetY is negative to pull shape up
    property real pathOffsetY: Math.min(offsetY, 0)
    // Base coordinates for left corner shape, shifted by pathOffsetY vertically
    property real _baseStartX: 30 * size
    property real _baseStartY: (_isTop ? 20 * size : 0) + pathOffsetY
    property real _baseLineX: 30 * size
    property real _baseLineY: (_isTop ? 0 : 20 * size) + pathOffsetY
    property real _baseArcX: 50 * size
    property real _baseArcY: (_isTop ? 20 * size : 0) + pathOffsetY
    // Mirror coordinates for right corners
    property real _startX: _isRight ? (concaveWidth - _baseStartX) : _baseStartX
    property real _startY: _baseStartY
    property real _lineX: _isRight ? (concaveWidth - _baseLineX) : _baseLineX
    property real _lineY: _baseLineY
    property real _arcX: _isRight ? (concaveWidth - _baseArcX) : _baseArcX
    property real _arcY: _baseArcY
    // Arc direction varies by corner to maintain proper concave shape
    property int _arcDirection: {
        if (_isTop && _isLeft)
            return PathArc.Counterclockwise;

        if (_isTop && _isRight)
            return PathArc.Clockwise;

        if (_isBottom && _isLeft)
            return PathArc.Clockwise;

        if (_isBottom && _isRight)
            return PathArc.Counterclockwise;

        return PathArc.Counterclockwise;
    }

    width: concaveWidth
    height: concaveHeight
    // Position relative to parent based on corner type
    x: _isLeft ? offsetX : (parent ? parent.width - width + offsetX : 0)
    y: _isTop ? offsetY : (parent ? parent.height - height + offsetY : 0)
    preferredRendererType: Shape.CurveRenderer
    layer.enabled: true
    layer.samples: 4

    ShapePath {
        strokeWidth: 0
        fillColor: root.fillColor
        strokeColor: root.fillColor
        startX: root._startX
        startY: root._startY

        PathLine {
            x: root._lineX
            y: root._lineY
        }

        PathArc {
            x: root._arcX
            y: root._arcY
            radiusX: root.arcRadius
            radiusY: root.arcRadius
            useLargeArc: false
            direction: root._arcDirection
        }

    }

}
