with Ada.Text_IO;
with Ada.Strings.Unbounded;

package body shared is
    use Ada.Text_IO;

    function read_file(path : String) return CommandVec is
        use Ada.Strings.Unbounded;

        commands : CommandVec;
        infile : File_Type;
    begin
        open(infile, mode => in_file, name => path);

        while not end_of_file(infile) loop
            declare
                line : Unbounded_String;
                idx : Natural;
                left : Unbounded_String;
                right : Unbounded_String;
                direction : Directions;
                distance : Natural;
                cmd : Command;
            begin
                line := To_Unbounded_String(Get_Line(infile));
                idx := Index(line, " ", 1);
                left := Unbounded_Slice(line, 1, idx - 1);
                right := Unbounded_Slice(line, idx + 1, Length(line));
                direction := Directions'Value(To_String(left));
                distance := Natural'Value(To_String(right));
                cmd := (direction, distance);
                commands.append(cmd);
            end;
        end loop;

        return commands;
    end read_file;

    procedure put_satanized_number_line(val : in Natural) is
        img : String :=  Natural'Image(val);
    begin
        put_line(img(img'First + 1 .. img'Last));
    end put_satanized_number_line;
end shared;