import { NetRequest } from "@/Engine/CatanEngine/NetManagerV2/NetRequest";
import { VipRequest } from "./VIPRequest";

export namespace FriendRequest {
	export type SingleFriendData = [
		aId: number,
		nickname: string,
		hasAvatar: 0 | 1,
		vip: VipRequest.Level,
		isOnline: 0 | 1,
	]
	export type ListFriendData = SingleFriendData[];
	// =======================================================================================
	/** 好友 朋友列表 協定 */
	export class List extends NetRequest<null, ListFriendData> {
		get Method(): string {
			return "friend.allow_list";
		}

		constructor() {
			super();
		}
	}
	// =======================================================================================
	export enum AddError {
		Self = 11,
		Exists,
		PlayerNotExists,
		IsDeny,
	}
	/** 好友 加好友 協定 */
	export class Add extends NetRequest<number, JSON> {
		get Method(): string {
			return "friend.add_allow";
		}

		/**
		 * @param {number} aid aid
		 */
		constructor(aid: number) {
			super();
			this.Data = aid;
		}
	}
	// =======================================================================================
	/** 好友 刪除好友 協定 */
	export class Del extends NetRequest<number, JSON> {
		get Method(): string {
			return "friend.del_allow";
		}

		/**
		 * @param {number} aid aid
		 */
		constructor(aid: number) {
			super();
			this.Data = aid;
		}
	}
	// =======================================================================================
	/** 好友 拒絕列表 協定 */
	export class DenyList extends NetRequest<null, ListFriendData> {
		get Method(): string {
			return "friend.deny_list";
		}

		constructor() {
			super();
		}
	}
	// =======================================================================================
	export enum DenyAddError {
		Self = 11,
		Exists = 12,
		PlayerNotExists = 13,
		IsAllow = 14,
	}
	/** 好友 加入拒絕列表 協定 */
	export class DenyAdd extends NetRequest<number, JSON> {
		get Method(): string {
			return "friend.add_deny";
		}

		/**
		 * @param {number} aid aid
		 */
		constructor(aid: number) {
			super();
			this.Data = aid;
		}
	}
	// =======================================================================================
	/** 好友 刪除拒絕列表 協定 */
	export class DenyDel extends NetRequest<number, JSON> {
		get Method(): string {
			return "friend.del_deny";
		}

		/**
		 * @param {number} aid aid
		 */
		constructor(aid: number) {
			super();
			this.Data = aid;
		}
	}
	// =======================================================================================
}