import crypto from 'crypto';

export function signRSASHA256(data: string, privateKey: string): string {
  const sign = crypto.createSign('RSA-SHA256');
  sign.update(data, 'utf8');
  sign.end();
  return sign.sign(privateKey, 'base64');
}

export function convertSHA256HashToUUID(hash: string): string {
  return `${hash.slice(0, 8)}-${hash.slice(8, 12)}-${hash.slice(12, 16)}-${hash.slice(16, 20)}-${hash.slice(20, 32)}`;
}

export function convertToDictionaryItemsRepresentation(obj: Record<string, string>): any {
  return new Map(Object.entries(obj).map(([k, v]) => [k, [v, new Map()]]));
}

export function sha256(data: string | Buffer): string {
  return crypto.createHash('sha256').update(data).digest('hex');
}

export function sha256Base64Url(data: string | Buffer): string {
  const base64 = crypto.createHash('sha256').update(data).digest('base64');
  return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

export function md5Hex(data: string | Buffer): string {
  return crypto.createHash('md5').update(data).digest('hex');
}
