const std = @import("std");
const Neuron = @import("neuron.zig").Neuron;
const Tensor = @import("tensor.zig").Tensor;

pub fn main() !void {
    // 1. Setup dell'allocatore per la memoria
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    const allocator = gpa.allocator();
    defer _ = gpa.deinit();

    // 2. Creiamo un neurone con 3 ingressi
    var my_neuron = try Neuron.init(allocator, 3);
    defer my_neuron.deinit();

    // 3. Creiamo dei dati di input di esempio (es. [1.0, 0.5, -2.0])
    var inputs = try Tensor.init(allocator, &[_]usize{3});
    defer inputs.deinit();
    inputs.data[0] = 1.0;
    inputs.data[1] = 0.5;
    inputs.data[2] = -2.0;

    // 4. Eseguiamo il calcolo
    const output = my_neuron.forward(inputs);

    std.debug.print("Input: {any}\n", .{inputs.data});
    std.debug.print("Pesi del neurone: {any}\n", .{my_neuron.weights.data});
    std.debug.print("Risultato (Output): {d:.4}\n", .{output});
}
