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;
    // Denormalized fields follow.
    uint64 total_net = 5;
    uint64 total = 6;
}

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

message InvoiceData {
    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;
    // Optional, if not given the proforma will be created with the current time.
    int64 date = 14;
    int64 days_due = 8;
    string iban = 9;
    string swift = 10;
    string unit = 13;
    // Next tag: 15
}

message Invoice {
    // Original invoice parameters/data.
    InvoiceData data = 1;
    enum State {
        STATE_INVALID = 0;
        STATE_PROFORMA = 1;
        STATE_SEALED = 2;
    };
    State state = 2;
    string uid = 9;
    // If sealed, otherwise 'proforma'.
    string final_uid = 3;
    int64 date = 4;
    int64 due_date = 5;
    // Denormalized fields follow.
    uint64 total_net = 6;
    uint64 total = 7;
    string unit = 8;
}

message CreateInvoiceRequest {
    InvoiceData invoice_data = 1;
}

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

message GetInvoiceRequest {
    string uid = 1;
}

message GetInvoiceResponse {
    Invoice invoice = 1;
}

message RenderInvoiceRequest {
    string uid = 1;
    string language = 2;
}

message RenderInvoiceResponse {
    bytes data = 1;
}

message SealInvoiceRequest {
    string uid = 1;
    enum DateSource {
        DATE_SOURCE_NOW = 0;
        DATE_SOURCE_PROFORMA = 1;
    }
    DateSource date_source = 2;
    string language = 3;
}

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);
}
