import { Group } from '@/type/template'

// Интерфейсы для API групп
export interface GetGroupsOutput {
  groups: Group[]
}

export interface GetGroupOutput {
  group: Group | null
}

export interface CreateGroupInput {
  name: string
  order?: number
}

export interface CreateGroupOutput {
  id: string
}

export interface PatchGroupInput {
  name?: string | null
  order?: number | null
}

export interface PatchGroupOutput extends Group {}

// API получение всех групп
export async function getGroupsApi(): Promise<GetGroupsOutput> {
  try {
    const response = await fetch('/api/groups/', {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result: GetGroupsOutput = await response.json()
    return result
  } catch (error) {
    console.error('Ошибка при получении групп:', error)
    throw new Error('Ошибка при получении групп с сервера')
  }
}

// API получение конкретной группы
export async function getGroupApi(groupId: string): Promise<GetGroupOutput> {
  try {
    const response = await fetch(`/api/groups/${groupId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result: GetGroupOutput = await response.json()
    return result
  } catch (error) {
    console.error('Ошибка при получении группы:', error)
    throw new Error('Ошибка при получении группы с сервера')
  }
}

// API создание группы
export async function createGroupApi(
  group: CreateGroupInput
): Promise<CreateGroupOutput> {
  try {
    const response = await fetch('/api/groups/', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(group),
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result: CreateGroupOutput = await response.json()
    return result
  } catch (error) {
    console.error('Ошибка при создании группы:', error)
    throw new Error('Ошибка при создании группы на сервере')
  }
}

// API обновление группы
export async function patchGroupApi(
  groupId: string,
  group: PatchGroupInput
): Promise<PatchGroupOutput> {
  try {
    const response = await fetch(`/api/groups/${groupId}`, {
      method: 'PATCH',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(group),
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const result: PatchGroupOutput = await response.json()
    return result
  } catch (error) {
    console.error('Ошибка при обновлении группы:', error)
    throw new Error('Ошибка при обновлении группы на сервере')
  }
}

// API удаление группы (если потребуется)
export async function deleteGroupApi(groupId: string): Promise<{success: boolean}> {
  try {
    const response = await fetch(`/api/groups/${groupId}`, {
      method: 'DELETE',
      headers: {
        'Content-Type': 'application/json',
      },
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    return { success: true }
  } catch (error) {
    console.error('Ошибка при удалении группы:', error)
    throw new Error('Ошибка при удалении группы на сервере')
  }
}