defmodule Parser.AX25Test do
  use ExUnit.Case, async: true
  use ExUnitProperties

  alias Parser.AX25

  describe "parse_callsign/1" do
    test "parses callsign with dash" do
      assert {:ok, {"CALL", "1"}} = AX25.parse_callsign("CALL-1")
    end

    test "parses callsign without dash" do
      assert {:ok, {"CALL", "0"}} = AX25.parse_callsign("CALL")
    end

    test "returns error for empty string" do
      assert {:error, _} = AX25.parse_callsign("")
    end

    test "returns error for non-binary input" do
      assert {:error, _} = AX25.parse_callsign(123)
    end

    property "parses any ASCII string as callsign or returns error" do
      check all s <- StreamData.string(:ascii, min_length: 1, max_length: 10) do
        result = AX25.parse_callsign(s)
        assert match?({:ok, {_base, _ssid}}, result) or match?({:error, _}, result)
      end
    end
  end

  describe "parse_path/1" do
    test "returns error for any input (stub)" do
      assert {:error, _} = AX25.parse_path("WIDE1-1,WIDE2-2")
      assert {:error, _} = AX25.parse_path("")
    end

    property "always returns error for any string (stub)" do
      check all s <- StreamData.string(:ascii, min_length: 1, max_length: 20) do
        assert match?({:error, _}, AX25.parse_path(s))
      end
    end
  end
end
