syntax = "proto3";

package billing.documents.v1;

option go_package = "github.com/tech/sendico/pkg/proto/billing/documents/v1;documentsv1";


// ---------------------------
// ENUMS
// ---------------------------

// DocumentType defines supported accounting document kinds.
enum DocumentType {
  DOCUMENT_TYPE_UNSPECIFIED = 0;

  // Invoice issued for the payment
  DOCUMENT_TYPE_INVOICE     = 1;

  // Service acceptance act (common in EU/RU accounting)
  DOCUMENT_TYPE_ACT         = 2;

  // Simple receipt confirmation
  DOCUMENT_TYPE_RECEIPT     = 3;
}


// ---------------------------
// SERVICE
// ---------------------------

// DocumentService provides document metadata for payment lists
// and lazy document generation on demand.
service DocumentService {

  // BatchResolveDocuments is used by BFF when rendering
  // a page of payments. This prevents N+1 calls by resolving
  // document metadata for many payments in a single request.
  rpc BatchResolveDocuments(BatchResolveDocumentsRequest)
      returns (BatchResolveDocumentsResponse);

  // GetDocument returns the actual PDF file.
  // If the document was not generated before, the service
  // generates it lazily, stores it, and returns it.
  rpc GetDocument(GetDocumentRequest)
      returns (GetDocumentResponse);
}


// ---------------------------
// BATCH RESOLVE (for payment tables)
// ---------------------------

// BatchResolveDocumentsRequest contains a list of payment references
// for which document availability should be resolved.
message BatchResolveDocumentsRequest {
  repeated string payment_refs = 1;
}

// DocumentMeta describes document availability for a single payment.
message DocumentMeta {
  // Payment reference
  string payment_ref = 1;

  // Document types that are applicable for this payment
  // based on business rules and payment snapshot.
  repeated DocumentType available_types = 2;

  // Document types that were already generated and stored.
  // Other available types will be generated lazily when requested.
  repeated DocumentType ready_types = 3;
}

// BatchResolveDocumentsResponse returns metadata for all requested payments.
message BatchResolveDocumentsResponse {
  repeated DocumentMeta items = 1;
}


// ---------------------------
// GET DOCUMENT (lazy generation)
// ---------------------------

// GetDocumentRequest requests a specific document for a payment.
message GetDocumentRequest {
  string payment_ref = 1;

  // Type of document to retrieve (invoice, act, receipt, etc.)
  DocumentType type  = 2;
}

// GetDocumentResponse returns the generated PDF content.
message GetDocumentResponse {
  // Raw PDF bytes
  bytes  content   = 1;

  // Suggested filename for download (e.g. invoice_123.pdf)
  string filename  = 2;

  // MIME type, typically "application/pdf"
  string mime_type = 3;
}
