import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { ITrnmst, IDropBdg } from '../../interfaces/main.interface';

@Injectable({
  providedIn: 'root'
})
export class TransactionStateService {
  // ประกาศ BehaviorSubject ด้วย Interface
  private transactionState = new BehaviorSubject<ITrnmst[] | null>(null);
  private budgetState = new BehaviorSubject<IDropBdg[] | null>(null);

  // ส่ง Observable ไปให้ components subscribe
  getTransactionState(): Observable<ITrnmst[] | null> {
    return this.transactionState.asObservable();
  }

  // เซ็ท state
  setTransactionState(transactions: ITrnmst[]): void {
    this.transactionState.next(transactions);
  }

    // 🟢 [NEW] อัปเดตหรือเพิ่มรายการเดียว
  setStateEditOne(item: ITrnmst): void {
    const current = this.transactionState.getValue() || [];

    // หา index จาก trnseq (หรือ key อื่นที่ unique)
    const index = current.findIndex(x => x.trnseq === item.trnseq);

    if (index !== -1) {
      // กรณีมีอยู่แล้ว -> อัปเดตข้อมูลทับ
      current[index] = { ...current[index], ...item };
      this.transactionState.next([...current]); // spread เพื่อ trigger change detection
    } else {
      // กรณีไม่มี (รายการใหม่) -> เพิ่มต่อท้าย
      this.transactionState.next([...current, item]);
    }
  }

  // เคลียร์ state
  clearState(): void {
    this.transactionState.next(null);
  }


  setBudgetDrop(budget: IDropBdg[]): void {
    this.budgetState.next(budget);
  }

  getBudgetDrop(): Observable<IDropBdg[] | null> {
    return this.budgetState.asObservable();
  }
}
