using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using Newtonsoft.Json;

namespace AGVNavigationCore.Models
{
    /// <summary>
    /// 맵 상의 모든 객체의 최상위 기본 클래스
    /// 위치, 선택 상태, 기본 식별자 등을 관리
    /// </summary>
    public abstract class NodeBase
    {
        [Category("기본 정보")]
        [Description("객체의 고유 ID입니다.")]
        [ReadOnly(true)]
        public string Id { get; set; } = Guid.NewGuid().ToString();

        [Category("기본 정보")]
        public NodeType Type { protected set; get; } = NodeType.Normal;

        [Category("기본 정보")]
        [Description("객체의 좌표(X, Y)입니다.")]
        public virtual Point Position { get; set; } = Point.Empty;

        [Category("기본 정보")]
        [Description("객체 생성 일자입니다.")]
        [JsonIgnore]
        [ReadOnly(true), Browsable(false)]
        public DateTime CreatedDate { get; set; } = DateTime.Now;

        [Category("기본 정보")]
        [Description("객체 수정 일자입니다.")]
        [JsonIgnore]
        [ReadOnly(true), Browsable(false)]
        public DateTime ModifiedDate { get; set; } = DateTime.Now;

        [Browsable(false)]
        [JsonIgnore]
        public bool IsSelected { get; set; } = false;


        [Browsable(false)]
        [JsonIgnore]
        public bool IsHovered { get; set; } = false;



        public NodeBase()
        {
        }

        public NodeBase(string id, Point position)
        {
            Id = id;
            Position = position;
        }
    }
}
