/**
 * Channel Management Composables
 */
import { ref, Ref } from 'vue';
import request from '../../api/request';
import type { Provider, Model, Channel } from '../../types/model';

export function useChannelManagement() {
  const providers: Ref<Provider[]> = ref([]);
  const loading = ref(false);
  const error: Ref<string | null> = ref(null);

  const loadProviders = async () => {
    loading.value = true;
    error.value = null;
    try {
      const response = await request.get('/api/v1/providers');
      providers.value = response.data;
    } catch (err: any) {
      error.value = err.message || 'Failed to load providers';
      throw err;
    } finally {
      loading.value = false;
    }
  };

  const configureProvider = async (providerId: number, config: any) => {
    loading.value = true;
    error.value = null;
    try {
      const response = await request.put(`/api/v1/providers/${providerId}/config`, config);
      const index = providers.value.findIndex((p) => p.id === providerId);
      if (index !== -1) {
        providers.value[index] = response.data;
      }
      return response.data;
    } catch (err: any) {
      error.value = err.message || 'Failed to configure provider';
      throw err;
    } finally {
      loading.value = false;
    }
  };

  const refreshModels = async (providerId: number) => {
    loading.value = true;
    error.value = null;
    try {
      const response = await request.post(`/api/v1/providers/${providerId}/refresh-models`);
      const index = providers.value.findIndex((p) => p.id === providerId);
      if (index !== -1) {
        providers.value[index].models = response.data;
      }
      return response.data;
    } catch (err: any) {
      error.value = err.message || 'Failed to refresh models';
      throw err;
    } finally {
      loading.value = false;
    }
  };

  const deleteProvider = async (providerId: number) => {
    loading.value = true;
    error.value = null;
    try {
      await request.delete(`/api/v1/providers/${providerId}`);
      providers.value = providers.value.filter((p) => p.id !== providerId);
    } catch (err: any) {
      error.value = err.message || 'Failed to delete provider';
      throw err;
    } finally {
      loading.value = false;
    }
  };

  return {
    providers,
    loading,
    error,
    loadProviders,
    configureProvider,
    refreshModels,
    deleteProvider,
  };
}
