// Copyright © 2013-2026 Jonathan Vasquez <jon@xyinn.org>
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.

const std = @import("std");

const Utilities = @This();

const log = std.log.scoped(.utilities);

/// Create a random file name with the given extension. The file will be hidden.
///
/// Caller owns memory.
pub fn createRandomFileName(allocator: std.mem.Allocator, io: std.Io, extension: []const u8) ![]const u8 {
    var rng: std.Random.IoSource = .{ .io = io };
    const random = rng.interface();

    const part_1 = random.int(u32);
    const part_2 = random.int(u32);
    const part_3 = random.int(u32);

    return try std.fmt.allocPrint(allocator, ".{d}_{d}_{d}.{s}", .{ part_1, part_2, part_3, extension });
}

pub fn printHeader(version: []const u8) void {
    log.info("==================================", .{});
    log.info("Cactus {s}", .{version});
    log.info("Jonathan Vasquez <jon@xyinn.org>", .{});
    log.info("Simplified BSD License", .{});
    log.info("==================================\n", .{});
}
