using System.Windows;
using System.Windows.Media;
using HandyControl.Expression.Media;

namespace HandyControl.Expression.Shapes
{
    public sealed class Arc : PrimitiveShape, IArcGeometrySourceParameters
    {
        public static readonly DependencyProperty ArcThicknessProperty =
            DependencyProperty.Register("ArcThickness", typeof(double), typeof(Arc),
                new DrawingPropertyMetadata(0.0, DrawingPropertyMetadataOptions.AffectsRender));

        public static readonly DependencyProperty ArcThicknessUnitProperty =
            DependencyProperty.Register("ArcThicknessUnit", typeof(UnitType), typeof(Arc),
                new DrawingPropertyMetadata(UnitType.Pixel, DrawingPropertyMetadataOptions.AffectsRender));

        public static readonly DependencyProperty EndAngleProperty = DependencyProperty.Register("EndAngle",
            typeof(double), typeof(Arc),
            new DrawingPropertyMetadata(90.0, DrawingPropertyMetadataOptions.AffectsRender));

        public static readonly DependencyProperty StartAngleProperty =
            DependencyProperty.Register("StartAngle", typeof(double), typeof(Arc),
                new DrawingPropertyMetadata(0.0, DrawingPropertyMetadataOptions.AffectsRender));

        public double ArcThickness
        {
            get => (double) GetValue(ArcThicknessProperty);
            set => SetValue(ArcThicknessProperty, value);
        }

        public UnitType ArcThicknessUnit
        {
            get => (UnitType) GetValue(ArcThicknessUnitProperty);
            set => SetValue(ArcThicknessUnitProperty, value);
        }

        public double EndAngle
        {
            get => (double) GetValue(EndAngleProperty);
            set => SetValue(EndAngleProperty, value);
        }

        Stretch IGeometrySourceParameters.Stretch => Stretch;

        Brush IGeometrySourceParameters.Stroke => Stroke;

        double IGeometrySourceParameters.StrokeThickness => StrokeThickness;

        public double StartAngle
        {
            get => (double) GetValue(StartAngleProperty);
            set => SetValue(StartAngleProperty, value);
        }

        protected override IGeometrySource CreateGeometrySource()
        {
            return new ArcGeometrySource();
        }
    }
}