import { defineStore } from 'pinia';
import apiClient from '@/services/api';
import router from '@/router';

export const useClubStore = defineStore('club', {
  state: () => ({
    clubs: [],
    selectedClub: null,
    loading: false,
    error: null,
    subscription: null,
    subscriptionFeatures: []
  }),

  actions: {
    async fetchClubs() {
      this.loading = true;
      try {
        const response = await apiClient.get('/api/club');
        this.clubs = response.data;
      } catch (error) {
        this.error = error.response?.data?.message || '클럽 목록을 가져오는데 실패했습니다.';
        throw error;
      } finally {
        this.loading = false;
      }
    },
    
    // 클럽의 구독 정보 가져오기
    async fetchClubSubscription(clubId) {
      try {
        const response = await apiClient.post('/api/subscriptions/clubs', { clubId });
        this.subscription = response.data;
        // 구독 기능 정보 처리
        if (response.data && response.data.SubscriptionPlan && response.data.SubscriptionPlan.Features) {
          this.subscriptionFeatures = response.data.SubscriptionPlan.Features;
        }
        
        return response.data;
      } catch (error) {
        const userClubRole = localStorage.getItem('userClubRole');
        console.error('구독 정보를 가져오는 중 오류가 발생했습니다:', error);
        this.subscription = null;
        this.subscriptionFeatures = [];
        // 사용자 권한 확인
        if (userClubRole === '모임장' || userClubRole === '운영진') {
          // 구독 페이지로 이동
          setTimeout(() => {
            router.push('/club/subscription');
          }, 100);
        }
        
        return null;
      }
    },

    async fetchClubById(clubId) {
      this.loading = true;
      try {
        // 클럽 정보와 구독 정보를 동시에 가져오기
        const [clubResponse, subscriptionResponse] = await Promise.all([
          apiClient.post(`/api/club`, { clubId }),
          this.fetchClubSubscription(clubId)
        ]);
        
        // 클럽 정보와 구독 정보 합치기
        const clubData = clubResponse.data;
        if (subscriptionResponse) {
          clubData.subscription = subscriptionResponse;
          clubData.subscriptionFeatures = subscriptionResponse.SubscriptionPlan?.Features || [];
        }
        this.selectedClub = clubData;
        return clubData;
      } catch (error) {
        this.error = error.response?.data?.message || '클럽 정보를 가져오는데 실패했습니다.';
        throw error;
      } finally {
        this.loading = false;
      }
    },

    setSelectedClub(club) {
      this.selectedClub = club;
    },

    clearSelectedClub() {
      this.selectedClub = null;
    }
  },

  getters: {
    // 현재 구독 정보 가져오기
    getCurrentSubscription() {
      return this.subscription;
    },
    
    // 특정 기능 사용 권한 확인
    hasFeature() {
      return (featureCode) => {
        if (!this.subscriptionFeatures || this.subscriptionFeatures.length === 0) {
          return false;
        }
        return this.subscriptionFeatures.some(feature => 
          feature.code === featureCode && feature.status === 'active'
        );
      };
    },
    

  }
});
