evaluate method
Implementation
CoffeeDecision evaluate({bool hasOverride = false}) {
if (!config.enabled) {
return CoffeeDecision(
allowed: true,
message: "",
situation: CoffeeSituation.allowed);
}
if (hasOverride && config.allowOverride) {
return CoffeeDecision(
allowed: true,
message: CoffeeMessages.getMessage(
CoffeeSituation.overrideActivated,
config.roastLevel,
customMessages: config.customMessages?[CoffeeSituation.overrideActivated],
),
situation: CoffeeSituation.overrideActivated);
}
final now = _time.nowLocal();
final hour = _time.hour(now);
// Check min hour (Morning gate)
if (hour < config.minHour) {
final msg = CoffeeMessages.getMessage(
CoffeeSituation.beforeMinHour,
config.roastLevel,
timeString: _formatTime(now),
customMessages: config.customMessages?[CoffeeSituation.beforeMinHour],
);
final shouldBlock = config.mode == CoffeeMode.blockApp;
return CoffeeDecision(
allowed: !shouldBlock, // If warnOnly/overlayOnly, we allow proceed but return warning state
isWarning: !shouldBlock,
message: msg,
situation: CoffeeSituation.beforeMinHour,
);
}
// Check max hour (Night gate)
if (config.maxHour != null && hour >= config.maxHour!) {
final msg = CoffeeMessages.getMessage(
CoffeeSituation.afterMaxHour,
config.roastLevel,
timeString: _formatTime(now),
customMessages: config.customMessages?[CoffeeSituation.afterMaxHour],
);
// Usually late night is just a warning, but if they want to block...
// The requirements said "warn only" for max hour potentially, but let's follow the mode if strict.
// However, typical usage is: minHour = block, maxHour = warn.
// But let's respect the mode. If mode is blockApp, we block.
final shouldBlock = config.mode == CoffeeMode.blockApp;
return CoffeeDecision(
allowed: !shouldBlock,
isWarning: !shouldBlock,
message: msg,
situation: CoffeeSituation.afterMaxHour,
);
}
// Allowed
return CoffeeDecision(
allowed: true,
message: CoffeeMessages.getMessage(
CoffeeSituation.allowed,
config.roastLevel,
customMessages: config.customMessages?[CoffeeSituation.allowed],
),
situation: CoffeeSituation.allowed
);
}