import { HttpRequest, HttpStatusCode } from '@angular/common/http';
import { HttpMethod } from './tech.model';

export function isForbidden(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.Forbidden;
}

export function isUnauthorized(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.Unauthorized;
}

export function isUnprocessableEntity(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.UnprocessableEntity;
}

export function isServerError(status: HttpStatusCode): boolean {
	return status >= 500 && status < 600 && !isConnectionTimeout(status);
}

export function isConnectionTimeout(status: HttpStatusCode): boolean {
	return isBadGateway(status) || isServiceUnavailable(status) || isGatewayTimeout(status);
}

function isBadGateway(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.BadGateway;
}

export function isServiceUnavailable(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.ServiceUnavailable;
}

function isGatewayTimeout(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.GatewayTimeout;
}

export function isNotFound(status: HttpStatusCode): boolean {
	return status == HttpStatusCode.NotFound;
}

export function isChangingDataRequest(request: HttpRequest<unknown>): boolean {
	return request.method === HttpMethod.POST || request.method === HttpMethod.PUT || request.method === HttpMethod.PATCH || request.method === HttpMethod.DELETE;
}

export function existRequestHeader(request: HttpRequest<unknown>, key: string) {
	return request.headers.has(key);
}

export function addRequestHeader(request: HttpRequest<unknown>, key: string, token: string): HttpRequest<unknown> {
	return request.clone({ headers: request.headers.set(key, token) });
}