package api

import (
	"github.com/gin-gonic/gin"
	"github.com/goWxHook/goWxHook/core"
	"github.com/goWxHook/goWxHook/utils"
)

// getRoomList
//
//	@Summary		获取群列表
//	@Description	获取群列表接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Response		200	{object}	CommonStringResponse{Data=[]core.GetChatRoomListResponseDataItem}	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/list [get]
func (w *WebApi) getRoomList(c *gin.Context) {
	list, err := w.WxApi.GetChatRoomList()
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", list)
	return
}

// getRoomMemberList
//
//	@Summary		获取群成员列表
//	@Description	获取群成员列表接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			roomWxid	path		string																true	"微信群ID"
//	@Response		200			{object}	CommonStringResponse{Data=core.GetChatRoomMemberListResponseData}	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/member/list/{roomWxid} [get]
func (w *WebApi) getRoomMemberList(c *gin.Context) {
	roomWxid := c.Param("roomWxid")
	if len(roomWxid) == 0 {
		utils.ResponseError(c, "roomWxid is required", nil)
		return
	}
	list, err := w.WxApi.GetChatRoomMemberList(roomWxid)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", list)
	return
}

// getRoomDetailInfo
//
//	@Summary		获取微信群详细信息（协议）
//	@Description	获取微信群详细信息（协议）接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			roomWxid	path		string																						true	"微信群ID"
//	@Response		200			{object}	CommonStringResponse{Data=[]core.GetFriendDetailInfoByProtocolResponseDataContactListItem}	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/protocol/detail/{roomWxid} [get]
func (w *WebApi) getRoomDetailInfo(c *gin.Context) {
	roomWxid := c.Param("roomWxid")
	if len(roomWxid) == 0 {
		utils.ResponseError(c, "roomWxid is required", nil)
		return
	}
	info, err := w.WxApi.GetRoomDetailInfoByProtocol(roomWxid)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", info)
	return
}

// getRoomInviteRelationList
//
//	@Summary		获取群成员邀请关系(协议)
//	@Description	获取群成员邀请关系(协议)接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			roomWxid	path		string																true	"微信群ID"
//	@Response		200			{object}	CommonStringResponse{Data=core.GetRoomMemberInviteListResponseData}	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/protocol/invite/list/{roomWxid} [get]
func (w *WebApi) getRoomInviteRelationList(c *gin.Context) {
	roomWxid := c.Param("roomWxid")
	if len(roomWxid) == 0 {
		utils.ResponseError(c, "roomWxid is required", nil)
		return
	}
	info, err := w.WxApi.GetRoomMemberInviteList(roomWxid)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", info)
	return
}

// createRoom
//
//	@Summary		创建群聊
//	@Description	创建群聊接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.CreateRoomRequest	true	"微信ID列表"
//	@Response		200		{object}	CommonStringResponse	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/create [post]
func (w *WebApi) createRoom(c *gin.Context) {
	var form core.CreateRoomRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.Wxids) == 0 {
		utils.ResponseError(c, "wxids is required", nil)
		return
	}
	err = w.WxApi.CreateChatRoom(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// createRoomByProtocol
//
//	@Summary		创建群聊(协议)
//	@Description	创建群聊(协议)接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.CreateRoomRequest													true	"微信ID列表"
//	@Response		200		{object}	CommonStringResponse{Data=core.CreateChatRoomByProtocolResponseData}	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/protocol/create [post]
func (w *WebApi) createRoomByProtocol(c *gin.Context) {
	var form core.CreateRoomRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.Wxids) == 0 {
		utils.ResponseError(c, "wxids is required", nil)
		return
	}
	info, err := w.WxApi.CreateChatRoomByProtocol(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", info)
	return
}

// inviteToRoom
//
//	@Summary		邀请好友进群
//	@Description	邀请好友进群接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.InviteToRoomRequest									true	"邀请信息"
//	@Response		200		{object}	CommonStringResponse{Data=core.InviteToRoomResponseData}	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/member/invite [post]
func (w *WebApi) inviteToRoom(c *gin.Context) {
	var form core.InviteToRoomRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.MemberList) == 0 {
		utils.ResponseError(c, "member_list is required", nil)
		return
	}
	info, err := w.WxApi.InviteToRoom(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", info)
	return
}

// deleteRoomMember
//
//	@Summary		踢除群成员
//	@Description	踢除群成员接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.DelChatRoomMemberRequest	true	"成员信息"
//	@Response		200		{object}	CommonStringResponse{}			"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/member/delete [post]
func (w *WebApi) deleteRoomMember(c *gin.Context) {
	var form core.DelChatRoomMemberRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.MemberList) == 0 {
		utils.ResponseError(c, "member_list is required", nil)
		return
	}
	err = w.WxApi.DelChatRoomMember(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// editRoomName
//
//	@Summary		修改群聊名称
//	@Description	修改群聊名称接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.EditChatRoomMemberRequest	true	"成员信息"
//	@Response		200		{object}	CommonStringResponse{}			"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/name/modify [post]
func (w *WebApi) editRoomName(c *gin.Context) {
	var form core.EditChatRoomMemberRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.RoomWxid) == 0 {
		utils.ResponseError(c, "room_wxid is required", nil)
		return
	}
	err = w.WxApi.EditChatRoomName(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// editRoomNotice
//
//	@Summary		修改群公告
//	@Description	修改群公告接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.EditChatRoomNoticeRequest	true	"公告信息"
//	@Response		200		{object}	CommonStringResponse{}			"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/notice/modify [post]
func (w *WebApi) editRoomNotice(c *gin.Context) {
	var form core.EditChatRoomNoticeRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.RoomWxid) == 0 {
		utils.ResponseError(c, "room_wxid is required", nil)
		return
	}
	err = w.WxApi.EditChatRoomNotice(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// editRoomMineNickName
//
//	@Summary		修改我在本群的昵称
//	@Description	修改我在本群的昵称接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.EditRoomMineNickNameRequest	true	"昵称信息"
//	@Response		200		{object}	CommonStringResponse{}				"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/mine/nickname/modify [post]
func (w *WebApi) editRoomMineNickName(c *gin.Context) {
	var form core.EditRoomMineNickNameRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.RoomWxid) == 0 {
		utils.ResponseError(c, "room_wxid is required", nil)
		return
	}
	err = w.WxApi.EditRoomMineNickName(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// showRoomNickName
//
//	@Summary		是否显示群成员昵称
//	@Description	是否显示群成员昵称接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.RoomShowNickNameRequest	true	"昵称信息"
//	@Response		200		{object}	CommonStringResponse{}			"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/member/nickname/show [post]
func (w *WebApi) showRoomNickName(c *gin.Context) {
	var form core.RoomShowNickNameRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.RoomWxid) == 0 {
		utils.ResponseError(c, "room_wxid is required", nil)
		return
	}
	err = w.WxApi.RoomShowNickName(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// roomSaveToContact
//
//	@Summary		保存到/移出通讯录
//	@Description	保存到/移出通讯录接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.SaveRoomSaveToContactRequest	true	"昵称信息"
//	@Response		200		{object}	CommonStringResponse{}				"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/to_contact/save [post]
func (w *WebApi) roomSaveToContact(c *gin.Context) {
	var form core.SaveRoomSaveToContactRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.RoomWxid) == 0 {
		utils.ResponseError(c, "room_wxid is required", nil)
		return
	}
	err = w.WxApi.SaveRoomSaveToContact(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// addRoomMemberToFriend
//
//	@Summary		添加群成员为好友
//	@Description	添加群成员为好友接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.AddFriendRequest	true	"添加好友信息"
//	@Response		200		{object}	CommonStringResponse	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/friend/add [post]
func (w *WebApi) addRoomMemberToFriend(c *gin.Context) {
	var form core.AddFriendRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.Wxid) == 0 {
		utils.ResponseError(c, "wxid is required", nil)
		return
	}

	err = w.WxApi.AddFriend(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// deleteRoom
//
//	@Summary		退出群聊
//	@Description	退出群聊接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.DelChatRoomRequest	true	"推出的群聊"
//	@Response		200		{object}	CommonStringResponse	"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/delete [post]
func (w *WebApi) deleteRoom(c *gin.Context) {
	var form core.DelChatRoomRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	if len(form.RoomWxid) == 0 {
		utils.ResponseError(c, "room_wxid is required", nil)
		return
	}
	err = w.WxApi.DelChatRoom(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}

// autoAcceptRoom
//
//	@Summary		自动接受群邀请
//	@Description	自动接受群邀请接口
//	@Tags			群管理
//	@Accept			json
//	@Produce		json
//	@Param			body	body		core.AutoAcceptRoomRequest	true	"自动接受群邀请"
//	@Response		200		{object}	CommonStringResponse		"{\"code\":0, ....}
//	@Router			/api/v1/contact/room/accept/auto [post]
func (w *WebApi) autoAcceptRoom(c *gin.Context) {
	var form core.AutoAcceptRoomRequest
	err := c.ShouldBindJSON(&form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	err = w.WxApi.AutoAcceptRoom(form)
	if err != nil {
		utils.ResponseError(c, err.Error(), nil)
		return
	}
	utils.ResponseOK(c, "success", nil)
	return
}
