/* Copyright (C) Itseez3D, Inc. - All Rights Reserved
* You may not use this file except in compliance with an authorized license
* Unauthorized copying of this file, via any medium is strictly prohibited
* Proprietary and confidential
* UNLESS REQUIRED BY APPLICABLE LAW OR AGREED BY ITSEEZ3D, INC. IN WRITING, SOFTWARE DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED
* See the License for the specific language governing permissions and limitations under the License.
* Written by Itseez3D, Inc. <support@avatarsdk.com>, October 2026
*/

using System;

namespace AvatarSDKMove
{
	public class RequestException : Exception
	{
		private const long UnauthorizedCode = 401;
		private const long TooManyRequestsCode = 429;

		public long ResponseCode { get; private set; }
		public string Body { get; private set; }

		public RequestException(string url, long responseCode, string error, string body)
			: base(string.Format("Request to {0} failed: {1} {2} {3}", url, responseCode, error, body))
		{
			ResponseCode = responseCode;
			Body = body;
		}

		public bool IsUnauthorized { get { return ResponseCode == UnauthorizedCode; } }

		public bool IsTooManyRequests { get { return ResponseCode == TooManyRequestsCode; } }

		public bool IsClientError { get { return ResponseCode >= 400 && ResponseCode < 500; } }
	}
}
