import { hash } from '@node-rs/argon2';
import { IsOptional, IsString } from 'class-validator';
import crypto from 'crypto';
import * as uuid from 'uuid';
import { StatsClient } from '../../entities/StatsClient';

/**
 * This classed is used to create a new StatsClient entity from a json body (post request).
 */
export class CreateStatsClient {
    /**
     * The new client's description.
     */
    @IsString()
    @IsOptional()
    description?: string;

    /**
     * Converts this to a StatsClient entity.
     */
    public async toEntity(): Promise<StatsClient> {
        let newClient: StatsClient = new StatsClient();

        newClient.description = this.description;

        let newUUID = uuid.v4().toUpperCase();
        newClient.prefix = crypto.createHash("sha3-512").update(newUUID).digest('hex').substring(0, 7).toUpperCase();
        newClient.key = await hash(newClient.prefix + "." + newUUID);
        newClient.cleartextkey = newClient.prefix + "." + newUUID;

        return newClient;
    }
}