import { defineStore } from 'pinia';
import axios from 'axios';

export const useGlobalTransactionStore = defineStore('globalTransaction', {
  state: () => ({
    transactions: [],
    isLoading: false,
    error: null,
    lastFetched: null,
  }),

  getters: {
    getTransactionsByProduct: (state) => (productHash) => {
      return state.transactions.filter(tx => tx.product_hash === productHash);
    },
    getTransactionsByStore: (state) => (storeHash) => {
      return state.transactions.filter(tx => tx.store_hash === storeHash);
    }
  },

  actions: {
    async fetchTransactions(filters = {}) {
      try {
        this.isLoading = true;
        this.error = null;
        
        const response = await axios.post('/admin/transactions/list', filters);
        
        if (Array.isArray(response.data)) {
          this.transactions = response.data;
          this.lastFetched = Date.now();
        }
        
        return this.transactions;
      } catch (err) {
        this.error = 'Failed to load transactions';
        console.error('Error fetching transactions:', err);
        throw err;
      } finally {
        this.isLoading = false;
      }
    },

    async precache() {
      // Avoid refetching if data is fresh (less than 5 minutes old)
      if (this.transactions.length > 0 && this.lastFetched && (Date.now() - this.lastFetched < 300000)) {
        return;
      }
      
      await this.fetchTransactions();
    },

    clearCache() {
      this.transactions = [];
      this.lastFetched = null;
    }
  }
});
