import { AnnouncementCommentDto, AnnouncementDto, EventCommentDto, EventDto, IntranetDashboardDto, SocialCommentDto, SocialPostDto, } from '@/proxy/intranet/models' import apiService, { Config } from './api.service' export interface CreateSocialPostInput { content: string media?: { type: 'image' | 'video' | 'poll' urls?: string[] pollQuestion?: string pollOptions?: { text: string }[] } } export class IntranetService { apiName = 'Default' getDashboard = (config?: Partial) => apiService.fetchData( { method: 'GET', url: '/api/app/intranet/intranet-dashboard', }, { apiName: this.apiName, ...config }, ) getIntranetSocialPosts = (skipCount: number, maxResultCount: number, config?: Partial) => apiService.fetchData( { method: 'GET', url: '/api/app/intranet/intranet-social-posts', params: { skipCount, maxResultCount }, }, { apiName: this.apiName, ...config }, ) createSurveyResponse = ( surveyId: string, answers: { questionId: string; questionType: string; value: string }[], config?: Partial, ) => apiService.fetchData( { method: 'POST', url: '/api/app/intranet/survey-response', data: { surveyId, answers }, }, { apiName: this.apiName, ...config }, ) createSocialPost = (input: CreateSocialPostInput, config?: Partial) => apiService.fetchData( { method: 'POST', url: '/api/app/intranet/social-post', data: input, }, { apiName: this.apiName, ...config }, ) deleteSocialPost = (id: string, config?: Partial) => apiService.fetchData( { method: 'DELETE', url: `/api/app/intranet/${id}/social-post`, }, { apiName: this.apiName, ...config }, ) likeSocialPost = (id: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/like-social-post`, params: { id }, }, { apiName: this.apiName, ...config }, ) commentSocialPost = (id: string, content: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/comment-social-post`, params: { id, content }, }, { apiName: this.apiName, ...config }, ) voteSocialPoll = (postId: string, optionId: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/vote-social-poll`, params: { postId, optionId }, }, { apiName: this.apiName, ...config }, ) incrementAnnouncementViewCount = (id: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/${id}/announcement-view`, }, { apiName: this.apiName, ...config }, ) getAnnouncementComments = (announcementId: string, config?: Partial) => apiService.fetchData( { method: 'GET', url: `/api/app/intranet/announcement-comments/${announcementId}`, }, { apiName: this.apiName, ...config }, ) createAnnouncementComment = ( announcementId: string, content: string, config?: Partial, ) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/announcement-comment/${announcementId}`, params: { content }, }, { apiName: this.apiName, ...config }, ) likeAnnouncement = (id: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/like-announcement`, params: { id }, }, { apiName: this.apiName, ...config }, ) getEventComments = (eventId: string, config?: Partial) => apiService.fetchData( { method: 'GET', url: `/api/app/intranet/event-comments/${eventId}`, }, { apiName: this.apiName, ...config }, ) createEventComment = (eventId: string, content: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/event-comment/${eventId}`, params: { content }, }, { apiName: this.apiName, ...config }, ) likeEvent = (id: string, config?: Partial) => apiService.fetchData( { method: 'POST', url: `/api/app/intranet/like-event`, params: { id }, }, { apiName: this.apiName, ...config }, ) } export const intranetService = new IntranetService()