syntax = "proto3";

package invoice;

message Item {
    string title = 1;
    uint64 count = 2;
    uint64 unit_price = 3;
    // in thousands of percent points
    // (ie 23% == 23000)
    uint64 vat = 4;
}

message ContactPoint {
    string medium = 1;
    string contact = 2;
}

message Invoice {
    repeated Item item = 1;
    repeated string invoicer_billing = 2;
    repeated ContactPoint invoicer_contact = 3;
    repeated string customer_billing = 4;
    string invoicer_vat_id = 5;
    string invoicer_company_number = 12;
    string customer_vat_id = 6;
    bool reverse_vat = 7;
    bool us_customer = 11;
    int64 days_due = 8;
    string iban = 9;
    string swift = 10;
    string unit = 13;
}

message CreateInvoiceRequest {
    Invoice invoice = 1;
}

message CreateInvoiceResponse {
    // Unique invoice ID
    string uid = 1;
}

message GetInvoiceRequest {
    string uid = 1;
}

message GetInvoiceResponse {
    Invoice invoice = 1;
    enum State {
        STATE_INVALID = 0;
        STATE_PROFORMA = 1;
        STATE_SEALED = 2;
    };
    State state = 2;
    string final_uid = 3;
}

message RenderInvoiceRequest {
    string uid = 1;
}

message RenderInvoiceResponse {
    bytes data = 1;
}

message SealInvoiceRequest {
    string uid = 1;
}

message SealInvoiceResponse {
}

service Invoicer {
    rpc CreateInvoice(CreateInvoiceRequest) returns (CreateInvoiceResponse);
    rpc GetInvoice(GetInvoiceRequest) returns (GetInvoiceResponse);
    rpc RenderInvoice(RenderInvoiceRequest) returns (stream RenderInvoiceResponse);
    rpc SealInvoice(SealInvoiceRequest) returns (SealInvoiceResponse);
}
