import { create } from 'zustand';
export const useTourStore = create((set, get) => ({
    currentTour: null,
    legs: [],
    publicTours: [],
    userRole: null,
    activeLegId: null,
    mapCenter: [10.7769, 106.7009],
    setTour: (tour) => set({ currentTour: tour }),
    updateLegs: (legs) => set({ legs }),
    setActiveLegId: (id) => set({ activeLegId: id }),
    setMapCenter: (pos) => set({ mapCenter: pos }),
    fetchTour: async (id) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const token = localStorage.getItem('token');
        try {
            const response = await fetch(`${API_BASE}/api/v1/tours/${id}`, {
                headers: { 'Authorization': `Bearer ${token}` }
            });
            if (!response.ok)
                throw new Error(`HTTP ${response.status}`);
            const data = await response.json();
            let role = 'VIEWER_ONLY';
            if (token) {
                try {
                    const payload = JSON.parse(atob(token.split('.')[1]));
                    const currentUserId = payload.sub;
                    const participant = data.participants?.find((p) => p.userId === currentUserId);
                    if (participant)
                        role = participant.role;
                }
                catch (e) {
                    console.error("Lỗi khi xác định vai trò người dùng:", e);
                }
            }
            const legs = data.legs || [];
            set({ currentTour: data, legs, userRole: role, activeLegId: legs.length > 0 ? legs[0].id : null });
        }
        catch (err) {
            console.error('Không thể tải tour:', err);
        }
    },
    fetchPublicTours: async () => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const token = localStorage.getItem('token');
        if (!token)
            return;
        const response = await fetch(`${API_BASE}/api/v1/tours/explore`, {
            headers: {
                'Authorization': `Bearer ${token}`
            }
        });
        if (!response.ok)
            return;
        const data = await response.json();
        set({ publicTours: data });
    },
    createTour: async (tourData) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(tourData),
        });
        if (!response.ok) {
            const data = await response.json().catch(() => ({}));
            throw new Error(data.message || data.error || 'Lỗi khi tạo Tour');
        }
        const tour = await response.json();
        await get().fetchPublicTours();
        return tour;
    },
    updateTour: async (id, data) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${id}`, {
            method: 'PATCH',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(data),
        });
        if (!response.ok)
            throw new Error('Lỗi khi cập nhật Tour');
        get().fetchPublicTours();
    },
    deleteTour: async (id) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${id}`, {
            method: 'DELETE',
            headers: {
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
        });
        if (!response.ok) {
            const data = await response.json();
            throw new Error(data.message || 'Lỗi khi xóa Tour');
        }
        if (get().currentTour?.id === id)
            set({ currentTour: null });
        get().fetchPublicTours();
    },
    addLeg: async (tourId, data) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/legs`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(data),
        });
        if (!response.ok)
            throw new Error('Lỗi khi thêm chặng');
        get().fetchTour(tourId);
    },
    initializeLegs: async (tourId, count) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/legs/batch`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify({ count }),
        });
        if (!response.ok)
            throw new Error('Lỗi khi khởi tạo chặng');
        await get().fetchTour(tourId);
    },
    updateLeg: async (legId, data) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/legs/${legId}`, {
            method: 'PATCH',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(data),
        });
        if (!response.ok)
            throw new Error('Lỗi khi cập nhật chặng');
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    deleteLeg: async (legId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/legs/${legId}`, {
            method: 'DELETE',
            headers: {
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
        });
        const result = await response.json();
        if (!response.ok) {
            throw new Error(result.message || 'Lỗi khi xóa chặng');
        }
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    addLocation: async (tourId, locationData) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/locations`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(locationData),
        });
        if (!response.ok)
            throw new Error('Lỗi khi thêm địa điểm');
        get().fetchTour(tourId);
    },
    updateLocation: async (locationId, data) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/locations/${locationId}`, {
            method: 'PATCH',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(data),
        });
        if (!response.ok)
            throw new Error('Lỗi khi cập nhật địa điểm');
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    deleteLocation: async (locationId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/locations/${locationId}`, {
            method: 'DELETE',
            headers: {
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
        });
        if (!response.ok)
            throw new Error('Lỗi khi xóa địa điểm');
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    updateTourStartPoint: async (tourId, data) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/start-point`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(data),
        });
        console.log(`[STORE] updateTourStartPoint API Status: ${response.status}`);
        if (!response.ok)
            throw new Error('Lỗi khi thiết lập điểm bắt đầu');
        await get().fetchTour(tourId);
    },
    updateTourEndPoint: async (tourId, data) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/end-point`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(data),
        });
        if (!response.ok)
            throw new Error('Lỗi khi thiết lập điểm kết thúc');
        await get().fetchTour(tourId);
    },
    optimizeRouting: async (legId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/routing/optimize/${legId}`, {
            method: 'POST'
        });
        const { locations, totalDistance } = await response.json();
        const { currentTour } = get();
        if (currentTour) {
            const updatedLegs = currentTour.legs.map((l) => l.id === legId ? { ...l, locations: locations, totalDistance: totalDistance } : l);
            set({ currentTour: { ...currentTour, legs: updatedLegs }, legs: updatedLegs });
        }
    },
    removeMember: async (tourId, userId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/members/${userId}`, {
            method: 'DELETE',
            headers: {
                Authorization: `Bearer ${localStorage.getItem('token')}`,
            },
        });
        if (!response.ok)
            throw new Error('Lỗi khi xóa thành viên');
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    addMember: async (tourId, member) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/members`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                Authorization: `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify(member),
        });
        if (!response.ok) {
            const data = await response.json().catch(() => ({}));
            throw new Error(data.message || data.error || 'Lỗi khi thêm thành viên');
        }
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    createJoinRequest: async (tourId, userId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                Authorization: `Bearer ${localStorage.getItem('token')}`
            },
            body: JSON.stringify({ userId }),
        });
        if (!response.ok) {
            const data = await response.json().catch(() => ({}));
            throw new Error(data.message || data.error || 'Lỗi khi tạo yêu cầu tham gia');
        }
        return response.json();
    },
    fetchJoinRequests: async (tourId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests`, {
            headers: {
                Authorization: `Bearer ${localStorage.getItem('token')}`
            }
        });
        if (!response.ok) {
            const data = await response.json().catch(() => ({}));
            throw new Error(data.message || data.error || 'Lỗi khi tải yêu cầu tham gia');
        }
        return response.json();
    },
    acceptJoinRequest: async (tourId, requestId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests/${requestId}/accept`, {
            method: 'POST',
            headers: {
                Authorization: `Bearer ${localStorage.getItem('token')}`
            }
        });
        if (!response.ok) {
            const data = await response.json().catch(() => ({}));
            throw new Error(data.message || data.error || 'Lỗi khi chấp nhận yêu cầu');
        }
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
    rejectJoinRequest: async (tourId, requestId) => {
        const API_BASE = `http://${window.location.hostname}:3001`;
        const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests/${requestId}/reject`, {
            method: 'POST',
            headers: {
                Authorization: `Bearer ${localStorage.getItem('token')}`
            }
        });
        if (!response.ok) {
            const data = await response.json().catch(() => ({}));
            throw new Error(data.message || data.error || 'Lỗi khi từ chối yêu cầu');
        }
        const { currentTour } = get();
        if (currentTour)
            get().fetchTour(currentTour.id);
    },
}));
//# sourceMappingURL=useTourStore.js.map