package litigationplanner

// SubTrackRouting describes a proceeding type that has no native rules
// of its own and is normally rendered inside a parent proceeding's flow
// with one or more condition flags enabled. The Procedure Roadmap
// (verfahrensablauf) routes calc requests for these codes to the parent
// proceeding + default flags, but preserves the user-picked code/name
// in the response identity and surfaces a contextual note explaining
// the framing — see m/paliad#58 and the design doc cited above.
//
// Adding a new sub-track is a data-only change here: extend
// SubTrackRoutings with the (code, parent, flags, note) tuple and the
// renderer picks it up automatically. The note copy lives in this file
// because it's semantic to the routing, not UI chrome.
type SubTrackRouting struct {
	// Code is the user-picked proceeding code (e.g. "upc.ccr.cfi").
	Code string
	// ParentCode is the proceeding whose rules to use (e.g. "upc.inf.cfi").
	ParentCode string
	// DefaultFlags are merged into the user's flag set so the
	// gated rules render. Order is preserved.
	DefaultFlags []string
	// NoteDE / NoteEN are the contextual banner above the timeline,
	// explaining that the proceeding type is normally a sub-track.
	// Plain text — the frontend renders them as a banner.
	NoteDE string
	NoteEN string
}

// SubTrackRoutings — single-source-of-truth registry. Today: just CCR.
// The pattern generalises to other "sub-track" proceeding types (e.g.
// R.30 application to amend the patent as a standalone roadmap, R.46
// preliminary objection) once they have a proceeding-type code of their
// own. New entries here are picked up by the spawn-as-standalone
// renderer in Calculate without further wiring.
var SubTrackRoutings = map[string]SubTrackRouting{
	CodeUPCCounterclaim: {
		Code:         CodeUPCCounterclaim,
		ParentCode:   CodeUPCInfringement,
		DefaultFlags: []string{"with_ccr"},
		NoteDE:       "Die Nichtigkeitswiderklage läuft normalerweise innerhalb eines UPC-Verletzungsverfahrens mit aktiver Nichtigkeitswiderklage. Diese Zeitleiste zeigt das Verletzungsverfahren mit gesetztem with_ccr-Flag.",
		NoteEN:       "The counterclaim for revocation normally runs inside a UPC infringement action with the counterclaim flag set. This timeline shows the infringement action with with_ccr automatically enabled.",
	},
}

// LookupSubTrackRouting returns the sub-track routing for a proceeding
// code, or (zero, false) if the code is not a sub-track. Used by the
// fristenrechner Calculate path to spawn the parent flow with the sub-
// track's default flags.
func LookupSubTrackRouting(code string) (SubTrackRouting, bool) {
	r, ok := SubTrackRoutings[code]
	return r, ok
}
