import type { SeasonSegmentKey } from '../../season/season-types'; import { childScope, intIn, makeParser } from './parse-helpers'; import type { InspectionIntervalConfig } from './rule-config.types'; type IntervalSegment = Exclude; const MIN_INTERVAL_DAYS = 7; const MAX_INTERVAL_DAYS = 35; /** In the swarm season a colony is looked at weekly, at the latest every 9 days. */ const MAX_SWARM_INTERVAL_DAYS = 9; export const DEFAULT_INSPECTION_INTERVAL_CONFIG: InspectionIntervalConfig = { intervalDays: { FRUEHJAHR: 14, SCHWARMZEIT: 7, SOMMER: 14, SPAETSOMMER: 21, HERBST: 21, }, }; const SEGMENTS = Object.keys( DEFAULT_INSPECTION_INTERVAL_CONFIG.intervalDays, ) as IntervalSegment[]; export const inspectionIntervalParser = makeParser( 'INSPECTION_INTERVAL', DEFAULT_INSPECTION_INTERVAL_CONFIG, (scope) => { const days = childScope(scope, 'intervalDays'); const defaults = DEFAULT_INSPECTION_INTERVAL_CONFIG.intervalDays; const intervalDays = { ...defaults }; for (const segment of SEGMENTS) { intervalDays[segment] = intIn( days, segment, defaults[segment], MIN_INTERVAL_DAYS, segment === 'SCHWARMZEIT' ? MAX_SWARM_INTERVAL_DAYS : MAX_INTERVAL_DAYS, ); } return { intervalDays }; }, );