syntax = "proto3";
package headscale.v1;
option  go_package = "github.com/juanfont/headscale/gen/go/v1";

import "google/protobuf/timestamp.proto";
import "headscale/v1/namespace.proto";
import "headscale/v1/preauthkey.proto";

enum RegisterMethod {
    REGISTER_METHOD_UNSPECIFIED = 0;
    REGISTER_METHOD_AUTH_KEY    = 1;
    REGISTER_METHOD_CLI         = 2;
    REGISTER_METHOD_OIDC        = 3;
}

message Machine {
    uint64          id           = 1;
    string          machine_key  = 2;
    string          node_key     = 3;
    string          disco_key    = 4;
    repeated string ip_addresses = 5;
    string          name         = 6;
    Namespace namespace          = 7;

    google.protobuf.Timestamp last_seen              = 8;
    google.protobuf.Timestamp last_successful_update = 9;
    google.protobuf.Timestamp expiry                 = 10;

    PreAuthKey pre_auth_key = 11;

    google.protobuf.Timestamp created_at = 12;

    RegisterMethod register_method = 13;

    reserved 14 to 17;
    // google.protobuf.Timestamp updated_at = 14;
    // google.protobuf.Timestamp deleted_at = 15;

    // bytes host_info      = 15;
    // bytes endpoints      = 16;
    // bytes enabled_routes = 17;

    repeated string forced_tags = 18;
    repeated string invalid_tags = 19;
    repeated string valid_tags = 20;
}

message RegisterMachineRequest {
    string namespace = 1;
    string key       = 2;
}

message RegisterMachineResponse {
    Machine machine = 1;
}

message GetMachineRequest {
    uint64 machine_id = 1;
}

message GetMachineResponse {
    Machine machine = 1;
}

message UpdateMachineRequest {
    Machine machine = 1;
}

message UpdateMachineResponse {
    Machine machine = 1;
}

message DeleteMachineRequest {
    uint64 machine_id = 1;
}

message DeleteMachineResponse {
}

message ExpireMachineRequest {
    uint64 machine_id = 1;
}

message ExpireMachineResponse {
    Machine machine = 1;
}

message ListMachinesRequest {
    string namespace = 1;
}

message ListMachinesResponse {
    repeated Machine machines = 1;
}

message DebugCreateMachineRequest {
    string namespace       = 1;
    string          key    = 2;
    string          name   = 3;
    repeated string routes = 4;
}

message DebugCreateMachineResponse {
    Machine machine = 1;
}