// import { AxiosInstance } from "axios";
// import { AnimeTitle, CreateDescriptionModel, CreateGenreProportionModel, CreateMediaInfoModel, CreateNameModel, DeleteDescriptionModel, DeleteGenreProportionModel, DeleteMediaInfoModel, DeleteNameModel, EditDateModel, EditDescriptionModel, EditGenreProportionModel, EditNameModel, MediaInfo, RateDeleteModel, RateEditModel } from "./models/Types";
// import { AppendFormData, CatchError } from "./common";
// import { libraryClient } from "./axios";

// // const controllerUrl = 'https://localhost:7057/MediaContent/Anime/Title/';
// const controllerUrl = 'http://localhost:5198/MediaContent/Anime/Title/';
// // const controllerUrl = 'http://localhost:5198/MediaContent/Anime/Title2/';

// function FillMediaInfoUrl(mediaInfo: MediaInfo | null | undefined){
//     if (mediaInfo != null){
//         mediaInfo.url = `${controllerUrl}GetMedia?objectId=${mediaInfo.objectId}`;
//         // console.log(`mediaInfo.url: ${mediaInfo.url}`);
//     }
// }

// function FillUrls(animeTitle: AnimeTitle){
//     FillMediaInfoUrl(animeTitle.commonProperties.preview);
//     animeTitle.commonProperties.relatedContent.forEach(relatedContent => FillMediaInfoUrl(relatedContent));
// }

// export async function GetAnimeTitleList(client?: AxiosInstance | null) {
//     if (client == undefined) {
//         console.log('client is undefined')
//         return;
//     }
//     try {
//         // const { data, status } = await axios.get<Array<AnimeTitle>>(`${controllerUrl}List`,
//         client ??= libraryClient;
//         const { data } = await client.get<Array<AnimeTitle>>(`${controllerUrl}List`,
//             {
//                 headers: {
//                 Accept: 'text/plain',
//                 },
//             },
//         );

//         console.log('data');
// 	    console.log(data);
//         //console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);
//         data.forEach(animeTitle => FillUrls(animeTitle));
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }

// export async function GetAnimeTitleDetail(id: string, client?: AxiosInstance | null) {
//     try {
//         // const { data, status } = await axios.get<Array<AnimeTitle>>(`${controllerUrl}List`,
//         client ??= libraryClient;
//         const { data } = await client.get<AnimeTitle>(`${controllerUrl}?TitleId=${id}`,
//             {
//                 headers: {
//                 Accept: 'text/plain',
//                 },
//             },
//         );

//         //console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);
//         FillUrls(data)
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }


// export async function RateAnimeTitle(model: RateEditModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}Rate`, model, axiosConfig);
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }

// export async function UnrateAnimeTitle(model: RateDeleteModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             },
//             // data: model
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}Unrate`, model, axiosConfig);
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }


// // export async function CreateAnimeTitle(client: AxiosInstance, model: TitleCreateModel) {
// export async function CreateAnimeTitle(form: FormData, client?: AxiosInstance | null) {
//     try {
//         // 👇️ const data: GetUsersResponse
//         // const { data, status } = await axios.post<string>(`${controllerUrl}Create`,
//         //     {
//         //         // headers: {
//         //         // // Accept: 'text/plain',
//         //         // },
//         //         // body: model
//         //     },
//         // );
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 // ContentType: 'application/json'
//                 ContentType: 'multipart/form-data'
//             }
//         }
//         client ??= libraryClient;
//         // const { data, status } = await axios.post<string>(`${controllerUrl}Create`, model, axiosConfig);
//         const { data } = await client.post<string>(`${controllerUrl}Create`, form, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }


// //- - - - - - - - - - COMMON PROPERTIES - - - - - - - - - - 
// export async function CreateAnimeTitleName(model: CreateNameModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}AddName`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function EditAnimeTitleName(model: EditNameModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}EditName`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function DeleteAnimeTitleName(model: DeleteNameModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}DeleteName`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }


// export async function SetAnimeTitlePreview(model: CreateMediaInfoModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'multipart/form-data'
//             }
//         }
//         client ??= libraryClient;
//         const formData = new FormData();
//         Object.entries(model).forEach(([key, value]) => {
// 			if (value != null) {
// 				AppendFormData(formData, key, value);
// 				// formData.append(key, JSON.stringify(value));
// 			}
// 		});
//         console.log('model');
//         console.log(model);
//         console.log('formData');
//         console.log(formData);
//         // const { data } = await client.post<string>(`${controllerUrl}SetPreview`, model, axiosConfig);
//         const { data } = await client.post<string>(`${controllerUrl}SetPreview`, formData, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function ClearAnimeTitlePreview(model: DeleteMediaInfoModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}ClearPreview`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }


// export async function CreateAnimeTitleDescription(model: CreateDescriptionModel, client?: AxiosInstance | null) {
//     try {
//         // const axiosConfig = {
//         //     headers:{
//         //         Accept: 'text/plain',
//         //         ContentType: 'application/json'
//         //     }
//         // };
//         // const { data, status } = await axios.post<string>(`${controllerUrl}AddDescription`, model, axiosConfig);
//         const { data } = await client({
//             method: 'post',
//             url: `${controllerUrl}AddDescription`,
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             },
//             data: model,
//             });

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function EditAnimeTitleDescription(model: EditDescriptionModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}EditDescription`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function DeleteAnimeTitleDescription(model: DeleteDescriptionModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}DeleteDescription`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }

// export async function CreateAnimeTitleGenre(model: CreateGenreProportionModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}AddGenre`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function EditAnimeTitleGenre(model: EditGenreProportionModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}EditGenre`, model, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function DeleteAnimeTitleGenre(model: DeleteGenreProportionModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             },
//             data: model
//         }
//         client ??= libraryClient;
//         const { data } = await client.post<string>(`${controllerUrl}DeleteGenre`, axiosConfig);

//         // console.log(JSON.stringify(data, null, 4));

//         // 👇️ "response status is: 200"
//         // console.log('response status is: ', status);

//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }


// export async function SetAnimeTitleAnnouncementDate(model: EditDateModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post(`${controllerUrl}SetAnnouncementDate`, model, axiosConfig);
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function SetAnimeTitleEstimatedReleaseDate(model: EditDateModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         const { data } = await client.post(`${controllerUrl}SetEstimatedReleaseDate`, model, axiosConfig);
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }
// export async function SetAnimeTitleReleaseDate(model: EditDateModel, client?: AxiosInstance | null) {
//     try {
//         const axiosConfig = {
//             headers:{
//                 Accept: 'text/plain',
//                 ContentType: 'application/json'
//             }
//         }
//         client ??= libraryClient;
//         // const { data, status } = await axios.post(`${controllerUrl}SetReleaseDate`, model, axiosConfig);
//         const { data } = await client.post(`${controllerUrl}SetReleaseDate`, model, axiosConfig);
//         return data;
//     }
//     catch (error)
//     {
//         CatchError(error);
//     }
// }

// // export async function EditGenre(id : string, value: string) {
// //     try {
// //         // 👇️ const data: GetUsersResponse
// //         const { data, status } = await axios.post<Array<Genre>>(`${controllerUrl}EditGenre?id=${id}&genreName=${value}`,
// //         {
// //             headers: {
// //             // Accept: 'text/plain',
// //             },
// //             // body: {}
// //         },
// //         );

// //         console.log(JSON.stringify(data, null, 4));

// //         // 👇️ "response status is: 200"
// //         console.log('response status is: ', status);

// //         // return data;
// //     } catch (error) {
// //         if (axios.isAxiosError(error)) {
// //         console.log('error message: ', error.message);
// //         // return [];
// //         //return error.message;
// //         } else {
// //         console.log('unexpected error: ', error);
// //         // return [];
// //         //return 'An unexpected error occurred';
// //         }
// //     }
// // }
