/**
 * Fragmentación del JWT access_token en varias cookies cuando supera el límite ~4KB del navegador.
 * La lógica de fetch / Bearer no cambia: solo lectura/escritura de cookies.
 */

/** Por debajo de esto se usa una sola cookie `access_token` (compatibilidad). */
export const ACCESS_TOKEN_MAX_SINGLE = 3500;

export const ACCESS_TOKEN_CHUNK_SIZE = 3500;

/** Número de fragmentos; si existe, el token está en access_token_0..access_token_{n-1}. */
export const ACCESS_TOKEN_CHUNK_COUNT = 'access_token_chunks';

export const accessTokenChunkName = (index: number) => `access_token_${index}`;

export type AccessTokenSplit =
	| { kind: 'single'; value: string }
	| { kind: 'chunks'; parts: string[] };

export function splitAccessTokenForCookies(token: string): AccessTokenSplit {
	if (token.length <= ACCESS_TOKEN_MAX_SINGLE) {
		return { kind: 'single', value: token };
	}
	const parts: string[] = [];
	for (let i = 0; i < token.length; i += ACCESS_TOKEN_CHUNK_SIZE) {
		parts.push(token.slice(i, i + ACCESS_TOKEN_CHUNK_SIZE));
	}
	return { kind: 'chunks', parts };
}

/** Máximo de fragmentos soportados (JWT muy grande). */
export const ACCESS_TOKEN_MAX_CHUNKS = 32;
