import { apiClient } from "./client";
import type { Project, ProjectWithRepos } from "../types";

export type ProjectCreateInput = {
	name: string;
	description?: string | null;
};

export type ProjectUpdateInput = {
	name?: string | null;
	description?: string | null;
};

export type SetDefaultSSHKeyInput = {
	ssh_key_id: string;
};

export const listProjects = async (): Promise<ProjectWithRepos[]> => {
	const response = await apiClient.get<ProjectWithRepos[]>("/projects");
	return response.data;
};

export const createProject = async (
	input: ProjectCreateInput,
): Promise<Project> => {
	const response = await apiClient.post<Project>("/projects", input);
	return response.data;
};

export const updateProject = async (
	projectId: string,
	input: ProjectUpdateInput,
): Promise<Project> => {
	const response = await apiClient.patch<Project>(
		`/projects/${projectId}`,
		input,
	);
	return response.data;
};

export const deleteProject = async (projectId: string): Promise<void> => {
	await apiClient.delete(`/projects/${projectId}`);
};

export const setDefaultSSHKey = async (
	projectId: string,
	input: SetDefaultSSHKeyInput,
): Promise<Project> => {
	const response = await apiClient.patch<Project>(
		`/projects/${projectId}/default-ssh-key`,
		input,
	);
	return response.data;
};
