namespace UVC.Data
{
    /// <summary>
    /// 서로 다른 JSON 데이터 구조 간에 매핑 기능을 제공하는 클래스입니다.
    /// </summary>
    /// <remarks>
    /// ...
    /// 이 클래스는 IDataObject 인터페이스를 구현한 DataObject와 DataArray로 
    /// 데이터를 변환하여 통일된 방식으로 접근할 수 있도록 합니다.
    /// </remarks>
    public interface IDataObject
    {
        /// <summary>
        /// 모든 프로퍼티를 변경된 것으로 표시합니다.
        /// 전체 데이터가 갱신되었을 때 사용합니다.
        /// </summary>
        public void InitData();

        /// <summary>
        /// 다른 DataObject와 현재 객체를 비교하여 다른 부분만 설정합니다.
        /// 변경된 키는 자동으로 추적됩니다.
        /// </summary>
        /// <param name="other">비교할 DataObject</param>
        public void UpdateDifferent(IDataObject other);

        /// <summary>
        /// 업데이트된 속성만 포함하는 새로운 DataObject를 반환합니다.
        /// </summary>
        /// <returns>업데이트 된 항목만 가지고 있는 DataObject</returns>
        public IDataObject GetUpdatedObject();

        /// <summary>
        /// /// <summary>
        /// 업데이트 된 속성의 수.
        /// </summary>
        /// <returns>업데이트된 속성의 총 개수입니다. 업데이트된 속성이 없으면 0을 반환합니다.</returns>
        public int UpdatedCount { get; }

    }
}
