public static class AxiNSErrCode
{
#if UNITY_SWITCH
	public static string GetErrorInfo(this nn.Result result)
	{
		if (result.IsSuccess())
			return "NoErr";
		return GetErrorDetails(result.GetModule(), result.GetDescription());
	}
#endif
	/// <summary>
	/// 根据模块 ID 和描述 ID 返回任天堂 Switch 错误码的含义、可能原因及解决办法。
	/// </summary>
	/// <param name="moduleId">模块 ID</param>
	/// <param name="descriptionId">描述 ID</param>
	/// <returns>包含错误码、含义、可能原因及解决办法的字符串</returns>
	public static string GetErrorDetails(int moduleId, int descriptionId)
	{
		string errorCode = $"2{moduleId:D3}-{descriptionId:D4}"; // 格式化为 2XXX-YYYY
		string meaning = "未知错误";
		string causeAndSolution = "未知错误,请检查日志或联系任天堂支持。";

		switch (moduleId)
		{
			case 2: // nn::fs (文件系统)
				switch (descriptionId)
				{
					case 1:
						meaning = "ResultPathNotFound";
						causeAndSolution = "路径未找到。检查路径是否正确,确保父目录存在。使用 nn.fs.Directory.Create 创建父目录。";
						break;
					case 2:
						meaning = "ResultPermissionDenied";
						causeAndSolution = "权限被拒绝。可能是 Atmosphere 限制了 save:/ 的写权限。尝试调整 Atmosphere 配置或使用 sd:/ 挂载点。";
						break;
					case 3:
						meaning = "ResultPathAlreadyExists";
						causeAndSolution = "路径已存在。检查路径是否被占用,删除或重命名现有文件/目录。";
						break;
					case 5:
						meaning = "ResultTargetLocked";
						causeAndSolution = "目标被锁定。可能是文件正在使用中,关闭相关程序后重试。";
						break;
					case 7:
						meaning = "ResultTargetNotFound";
						causeAndSolution = "目标未找到。确认目标文件/目录是否存在,检查路径拼写。";
						break;
				}
				break;

			case 5: // nn::err (错误处理)
				switch (descriptionId)
				{
					case 3:
						meaning = "microSD 卡相关错误";
						causeAndSolution = "无法下载软件,可能是 microSD 卡损坏。移除 microSD 卡,重新插入,或更换卡。";
						break;
				}
				break;

			case 16: // nn::oe (操作系统错误)
				switch (descriptionId)
				{
					case 247:
						meaning = "microSD 卡存储问题";
						causeAndSolution = "microSD 卡损坏或不兼容。更换 microSD 卡,或将默认存储位置设置为系统内存。";
						break;
					case 390:
						meaning = "不支持的 microSD 卡";
						causeAndSolution = "microSD 卡格式不受支持。格式化为 exFAT 或 FAT32 后重试。";
						break;
					case 601:
						meaning = "microSD 卡数据损坏";
						causeAndSolution = "microSD 卡数据损坏。备份数据后格式化卡,或更换新卡。";
						break;
				}
				break;

			case 21: // nn::settings (设置)
				switch (descriptionId)
				{
					case 3:
						meaning = "系统软件未更新或损坏";
						causeAndSolution = "系统固件版本过旧或损坏。更新系统固件,或重新安装系统。";
						break;
				}
				break;

			case 101: // nn::fssrv (文件系统服务)
				switch (descriptionId)
				{
					case 1:
						meaning = "系统错误";
						causeAndSolution = "通用系统错误。重启 Switch,若问题持续,联系任天堂支持。";
						break;
					case 2:
						meaning = "固件损坏";
						causeAndSolution = "系统固件损坏。尝试更新系统,或恢复出厂设置(注意备份数据)。";
						break;
				}
				break;

			case 107: // nn::nim (网络安装管理)
				switch (descriptionId)
				{
					case 427:
						meaning = "固件损坏";
						causeAndSolution = "系统固件损坏。更新系统固件,或重新安装系统。";
						break;
					case 445:
						meaning = "硬件损坏或盗版内容";
						causeAndSolution = "可能是硬件损坏或存在盗版内容。删除盗版内容,重启 Switch,若无效联系任天堂支持。";
						break;
				}
				break;

			case 110: // nn::socket (网络套接字)
				switch (descriptionId)
				{
					case 1000:
						meaning = "网络连接失败";
						causeAndSolution = "无法连接到网络。检查网络连接,重启路由器,尝试切换到其他网络频段(2.4GHz/5GHz)。";
						break;
					case 2003:
						meaning = "无线网络连接失败";
						causeAndSolution = "无线信号弱或不稳定。靠近路由器,移除干扰物,或重启路由器。";
						break;
					case 2004:
						meaning = "网络设置不支持";
						causeAndSolution = "网络安全类型不受支持。Switch 支持 WEP/WPA/WPA2,调整路由器设置后重试。";
						break;
					case 2091:
						meaning = "有线网络连接失败";
						causeAndSolution = "有线连接问题。检查网线是否插好,重启 Switch 和路由器。";
						break;
					case 3127:
						meaning = "网络连接失败";
						causeAndSolution = "网络不稳定。测试网络连接,重启路由器,或联系网络提供商。";
						break;
				}
				break;

			case 115: // nn::mii (Mii 相关)
				switch (descriptionId)
				{
					case 96:
						meaning = "Mii 数据错误";
						causeAndSolution = "Mii 数据损坏。删除并重新创建 Mii,或更新系统。";
						break;
				}
				break;

			case 139: // nn::nfp (NFC/Amiibo)
				switch (descriptionId)
				{
					case 6:
						meaning = "Amiibo 读取错误";
						causeAndSolution = "Amiibo 读取失败。检查 Amiibo 是否损坏,更新系统,或尝试其他 Amiibo。";
						break;
				}
				break;

			case 153: // nn::ir (红外摄像头)
				switch (descriptionId)
				{
					case 321:
						meaning = "红外摄像头读取错误";
						causeAndSolution = "红外摄像头无法读取。检查摄像头是否被遮挡,清洁镜头,或联系任天堂支持。";
						break;
					case 1540:
						meaning = "红外摄像头硬件错误";
						causeAndSolution = "红外摄像头硬件故障。联系任天堂支持进行维修。";
						break;
				}
				break;

			case 155: // nn::account (账户服务)
				switch (descriptionId)
				{
					case 8006:
						meaning = "无法链接任天堂账户";
						causeAndSolution = "网络问题或服务中断。检查网络连接,稍后重试,或查看任天堂网络状态页面。";
						break;
				}
				break;

			case 160: // nn::online (在线服务)
				switch (descriptionId)
				{
					case 103:
						meaning = "无法加入在线匹配";
						causeAndSolution = "网络不稳定。重启 Switch,检查网络连接,或稍后重试。";
						break;
					case 202:
						meaning = "无法连接到在线服务";
						causeAndSolution = "服务可能正在维护。查看任天堂网络状态页面,稍后重试。";
						break;
					case 8006:
						meaning = "连接测试失败";
						causeAndSolution = "网络问题。重启路由器,检查网络设置,或尝试其他网络。";
						break;
				}
				break;

			case 162: // nn::application (应用程序)
				switch (descriptionId)
				{
					case 2:
						meaning = "软件崩溃";
						causeAndSolution = "软件崩溃,可能是盗版内容或固件问题。删除盗版内容,更新系统,或重新安装软件。";
						break;
					case 101:
						meaning = "软件需要更新";
						causeAndSolution = "游戏或软件需要更新。检查软件更新并安装。";
						break;
				}
				break;

			case 168: // nn::sys (系统)
				switch (descriptionId)
				{
					case 0:
						meaning = "需要软件更新";
						causeAndSolution = "软件需要更新。更新游戏或系统固件。";
						break;
					case 2:
						meaning = "系统崩溃";
						causeAndSolution = "系统崩溃,可能是硬件问题。重启 Switch,若无效联系任天堂支持。";
						break;
				}
				break;

			case 205: // nn::camera (摄像头)
				switch (descriptionId)
				{
					case 123:
						meaning = "摄像头读取错误";
						causeAndSolution = "摄像头无法读取。检查摄像头是否被遮挡,清洁镜头,或联系任天堂支持。";
						break;
				}
				break;

			case 306: // nn::ngc (网络游戏连接)
				switch (descriptionId)
				{
					case 501:
						meaning = "无法加入在线匹配";
						causeAndSolution = "网络连接中断。重启 Switch,检查网络连接,或稍后重试。";
						break;
					case 502:
						meaning = "匹配过程失败";
						causeAndSolution = "网络不稳定。测试网络连接,重启路由器,或联系网络提供商。";
						break;
					case 820:
						meaning = "在线服务不可用";
						causeAndSolution = "服务可能正在维护。查看任天堂网络状态页面,稍后重试。";
						break;
				}
				break;

			case 613: // nn::eShop (eShop)
				switch (descriptionId)
				{
					case 1400:
						meaning = "无法使用信用卡购买";
						causeAndSolution = "信用卡信息错误或 eShop 服务问题。检查信用卡信息,稍后重试,或联系任天堂支持。";
						break;
					case 6838:
						meaning = "eShop 连接失败";
						causeAndSolution = "网络问题或 eShop 维护。检查网络连接,查看任天堂网络状态页面,稍后重试。";
						break;
				}
				break;

			case 618: // nn::ngc (网络游戏连接)
				switch (descriptionId)
				{
					case 6:
						meaning = "无法加入在线匹配";
						causeAndSolution = "网络不稳定。重启 Switch,检查网络连接,或稍后重试。";
						break;
					case 201:
						meaning = "匹配已满";
						causeAndSolution = "尝试加入的匹配已满。稍后重试,或加入其他匹配。";
						break;
					case 501:
						meaning = "匹配过程失败";
						causeAndSolution = "网络连接中断。重启 Switch,检查网络连接,或稍后重试。";
						break;
				}
				break;

			case 801: // nn::sns (社交网络服务)
				switch (descriptionId)
				{
					case 7002:
						meaning = "无法上传截图到 Twitter";
						causeAndSolution = "服务可能正在维护。查看任天堂网络状态页面,稍后重试。";
						break;
					case 7199:
						meaning = "无法上传照片到 Facebook";
						causeAndSolution = "服务可能正在维护。查看任天堂网络状态页面,稍后重试。";
						break;
				}
				break;

			case 810: // nn::account (账户服务)
				switch (descriptionId)
				{
					case 1224:
						meaning = "无法登录任天堂账户";
						causeAndSolution = "网络问题或服务中断。检查网络连接,稍后重试,或查看任天堂网络状态页面。";
						break;
					case 1500:
						meaning = "无法登录 Facebook 账户";
						causeAndSolution = "服务可能正在维护。重启 Switch,稍后重试。";
						break;
				}
				break;

			case 811: // nn::account (账户服务)
				switch (descriptionId)
				{
					case 1006:
						meaning = "无法链接任天堂账户";
						causeAndSolution = "网络问题或 DNS 错误。检查网络连接,尝试更换 DNS(如 8.8.8.8),或稍后重试。";
						break;
					case 5001:
						meaning = "无法访问 eShop";
						causeAndSolution = "eShop 服务中断。查看任天堂网络状态页面,稍后重试。";
						break;
				}
				break;

			case 813: // nn::eShop (eShop)
				switch (descriptionId)
				{
					case 0:
						meaning = "eShop 访问失败";
						causeAndSolution = "eShop 服务中断。查看任天堂网络状态页面,稍后重试。";
						break;
					case 2470:
						meaning = "交易处理失败";
						causeAndSolution = "信用卡信息错误或 eShop 服务问题。检查信用卡信息,稍后重试,或联系任天堂支持。";
						break;
				}
				break;

			case 819: // nn::online (在线服务)
				switch (descriptionId)
				{
					case 3:
						meaning = "软件被暂停";
						causeAndSolution = "同一账户在另一台设备上使用。关闭其他设备上的软件,或使用不同账户。";
						break;
				}
				break;

			default:
				meaning = "未知模块";
				causeAndSolution = "未识别的模块 ID,请检查日志或联系任天堂支持。";
				break;
		}

		return $"错误码: {errorCode}\n含义: {meaning}\n可能原因及解决办法: {causeAndSolution}";
	}
}