// Copyright 2025 WIT.COM Inc Licensed GPL 3.0

syntax = "proto3";

package forgepb;

import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp

//    I don't need this kind of specicivity (can't spell)
//    but this is what the patch files contain and how git sees them
// message Blob {
//         string hunkLine         = 1;
//         bytes  data             = 2;
// }
//
// message File {
//         string filename         = 1;
//         string hashLine         = 2;
// 	repeated Blob  Blobs       = 3;
// }
//
// message Patch {
// 	repeated File  Files    = 1;
//      string repoNamespace    = 2;
// 	string   gH             = 3;
// 	string   gaI            = 4;
// 	string   gcI            = 5;
// }

// git log -1 --format="%H %aI %cI %an %ae %cn %ce"
message Patch {
        string repoNamespace    = 1; // the base repo git URL
        bytes  data             = 2; // the raw data of the whole patch
	string   gH             = 3;       // after some deliberation, I think I'll just try variable names
	string   gT             = 4;
	string   gP             = 5;
	string   gs             = 6;
	string   gaI            = 7;       // that exactly match what git uses.
	string   gan            = 8;
	string   gae            = 9;
	string   gcI            = 10;
	string   gcn            = 11;
	string   gce            = 12;
	string   gN             = 13;
	string   gGG            = 14;
	string   gGS            = 15;
	string   gGK            = 16;
        string newHash     	= 17; // new hash
        string state       	= 18; // the 'state' of the patch
}

message Patches {			   // this is a "PATCH: [1/x]" series
	string   uuid	        = 1;       // `autogenpb:uuid:be926ad9-1111-484c-adf2-d96eeabf3079` // todo: add autogenpb support for this
	string   version        = 2;       // `autogenpb:version:v0.0.45` // todo: add autogenpb support for this
	repeated Patch Patches  = 3;
}

message Patchset {			        // `autogenpb:marshal`
	Patches patches                 = 1;    //
	string   name                   = 2;    // `autogenpb:sort`
	string   comment                = 3;    //
	string   gitAuthorName          = 4;    // `autogenpb:sort`
	string   gitAuthorEmail         = 5;    //
        google.protobuf.Timestamp ctime = 6;    // create time of the patchset
	string   tmpDir                 = 7;    // temp dir
	string   startBranchName        = 8;    //
	string   endBranchName          = 9;    //
	string   startBranchHash        = 10;   //
	string   endBranchHash          = 11;   //
}

message Patchsets {			   // `autogenpb:marshal`
	string   uuid	        = 1;       // `autogenpb:uuid:be926ad9-f07f-484c-adf2-d96eeabf3079` // todo: add autogenpb support for this
	string   version        = 2;       // `autogenpb:version:v0.0.45` // todo: add autogenpb support for this
	repeated Patchset Patchsets  = 3;
}