/**
 * BaseState - 상태 관리 베이스 클래스
 * TbmState / DailyWorkReportState 공통 패턴
 */

class BaseState {
  constructor() {
    this.listeners = new Map();
  }

  /**
   * 상태 업데이트 + 리스너 알림
   */
  update(key, value) {
    const prevValue = this[key];
    this[key] = value;
    this.notifyListeners(key, value, prevValue);
  }

  /**
   * 리스너 등록
   */
  subscribe(key, callback) {
    if (!this.listeners.has(key)) {
      this.listeners.set(key, []);
    }
    this.listeners.get(key).push(callback);
  }

  /**
   * 리스너 알림
   */
  notifyListeners(key, newValue, prevValue) {
    const keyListeners = this.listeners.get(key) || [];
    keyListeners.forEach(callback => {
      try {
        callback(newValue, prevValue);
      } catch (error) {
        console.error(`[${this.constructor.name}] 리스너 오류 (${key}):`, error);
      }
    });
  }

  /**
   * 현재 사용자 정보 (localStorage)
   */
  getUser() {
    const userInfo = localStorage.getItem('sso_user');
    return userInfo ? JSON.parse(userInfo) : null;
  }
}

// 전역 노출
window.BaseState = BaseState;

console.log('[Module] common/base-state.js 로드 완료');
