namespace Distribution.Features.Region; // Code is optional: blank/null auto-generates the next REG-#### code; otherwise stored as entered (trimmed). public record CreateRegionRequest(string Name, string? Code = null); public record NextRegionCodeResponse(string Code); // Code is auto-generated on create; on update it is optional (null/blank keeps the current code). public record UpdateRegionRequest(string Name, string? Code = null); public record RegionResponse(Guid Id, string Code, string Name, bool IsActive, DateTime CreatedAt); public record RegionalTargetResponse(Guid RegionId, string Period, decimal TargetValue); public record RegionalBudgetResponse(Guid RegionId, string Period, decimal BudgetAmount); public record RegionAgencyMapResponse(Guid RegionId, Guid AgencyUserId); public record RegionalTaxRuleResponse(Guid RegionId, string RuleConfig); // Consolidated "beyond CRUD" management endpoint — replaces the separate // SetTarget/SetBudget/MapAgency/SetTaxRule endpoints. Every field is optional; only the // sub-actions whose fields are supplied get applied. Target/Budget both need Period. public record ManageRegionRequest( string? Period, decimal? TargetValue, decimal? BudgetAmount, Guid? AgencyUserId, string? RuleConfig); public record ManageRegionResponse( Guid RegionId, RegionalTargetResponse? Target, RegionalBudgetResponse? Budget, RegionAgencyMapResponse? AgencyMap, RegionalTaxRuleResponse? TaxRule); public record RegionHierarchyRouteItem(Guid RouteId, string RouteName, List StoreIds); public record RegionHierarchyResponse(Guid RegionId, string RegionName, List Routes); public record RegionDashboardResponse( Guid RegionId, string Period, decimal? TargetValue, decimal? BudgetAmount, int OrderCount, decimal ActualSales, DateTime? LastOrderDate, string? TaxRuleConfig, List AgencyUserIds); // Flat, CRUD-list-friendly view over the four "manage" sub-resources (RegionalTarget, // RegionalBudget, RegionalTaxRule, RegionAgencyMap), so the frontend can render one table like // any other resource list (e.g. Rides) instead of one row per region with derived columns. public enum RegionManageEntryType { Target, Budget, TaxRule, AgencyMap } public record RegionManageEntryResponse( Guid Id, Guid RegionId, string RegionName, RegionManageEntryType EntryType, string? Period, decimal? Amount, string? RuleConfig, Guid? AgencyUserId, DateTime CreatedAt);