//
//  DMKAnnotationView.h
//  DMKMap
//
//  Created by yunfei on 2025/3/20.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@protocol DMKAnnotation;

@interface DMKAnnotationView : UIView

/// 关联的annotation
@property (nonatomic, strong) id<DMKAnnotation> annotation;

/// 显示的image
@property (nonatomic, strong) UIImage *image;

/// 默认情况下，annotation view的中心位于annotation的坐标位置，可以设置centerOffset改变view的位置，正的偏移使view朝右下方移动，负的朝左上方，单位是像素
@property (nonatomic, assign) CGPoint centerOffset;

/// 默认情况下，弹出的气泡位于view正中上方，可以设置calloutOffset改变view的位置，正的偏移使view朝右下方移动，负的朝左上方，单位是像素
@property (nonatomic, assign) CGPoint calloutOffset;

/// 默认为YES，当为NO时view忽略触摸事件
@property (nonatomic, getter=isEnabled) BOOL enabled;

/// annotationView是否突出显示(一般不需要手动设置)
@property (nonatomic, getter=isHighlighted) BOOL highlighted;

/// 设置是否处于选中状态, 外部如果要选中请使用mapView的selectAnnotation方法
@property (nonatomic, getter=isSelected) BOOL selected;

/// 设置是否可以显示callout,默认为NO
@property (nonatomic, assign) BOOL canShowCallout;

/// 显示在气泡左侧的view
@property (nonatomic, strong) UIView *leftCalloutAccessoryView;

/// 显示在气泡右侧的view
@property (nonatomic, strong) UIView *rightCalloutAccessoryView;


- (instancetype)init NS_UNAVAILABLE;

- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;

/**
 * @brief 初始化并返回一个annotation view
 * @param annotation 关联的annotation对象
 * @return 初始化成功则返回annotation view,否则返回nil
 */
- (id)initWithAnnotation:(id<DMKAnnotation>)annotation;

/**
 * @brief 设置是否处于选中状态, 外部如果要选中请使用mapView的selectAnnotation方法
 * @param selected 是否选中
 * @param animated 是否动画设置
 */
- (void)setSelected:(BOOL)selected animated:(BOOL)animated;

@end

NS_ASSUME_NONNULL_END
