from pathlib import Path
import json, sys
root=Path(__file__).resolve().parents[2]
checks=[]
def contains(path,text,label):
    data=(root/path).read_text(encoding='utf-8-sig')
    checks.append((label,text in data))
contains(Path('MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Inputs.vb'),'Public Function AddDatePicker(Optional selectedDate As Nullable(Of Date) = Nothing','AddDatePicker route')
contains(Path('MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Inputs.vb'),'Public Function AddTimePicker(Optional selectedTime As Nullable(Of TimeSpan) = Nothing','AddTimePicker route')
contains(Path('MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Media.vb'),'Public Function AddCalendarView(Optional selectedDate As Nullable(Of Date) = Nothing','AddCalendarView route')
contains(Path('Component/Tokens/Component/DatePickerTokens.vb'),'Friend Const Placeholder As String = "Select date..."','date placeholder')
contains(Path('Component/Tokens/Component/TimePickerTokens.vb'),'Friend Const DefaultMinuteStep As Integer = 5','time default step')
contains(Path('Component/Tokens/Component/TimePickerTokens.vb'),'Friend Const Placeholder As String = "Select time..."','time placeholder')
contains(Path('Component/Tokens/Component/CalendarViewTokens.vb'),'Friend Const DefaultTitle As String = "Calendar"','calendar default title')
contains(Path('Component/Inputs/DatePicker/MASDatePicker.ViewState.vb'),'If normalized.HasValue Then normalized = ClampToRange(normalized.Value)','date selection clamp')
contains(Path('Component/Inputs/DatePicker/MASDatePicker.ViewState.vb'),'If _selectedDate.HasValue Then _displayMonth = FirstOfMonth(_selectedDate.Value)','date display month sync')
contains(Path('Component/Inputs/DatePicker/MASDatePicker.vb'),'Return _selectedDate.Value.ToString("d", CultureInfo.CurrentCulture)','date culture display')
contains(Path('Component/Inputs/TimePicker/MASTimePicker.Parsing.vb'),'If value < 1 Then Return 1','minute step lower clamp')
contains(Path('Component/Inputs/TimePicker/MASTimePicker.Parsing.vb'),'If value > 60 Then Return 60','minute step upper clamp')
contains(Path('Component/Inputs/TimePicker/MASTimePicker.Parsing.vb'),'Dim totalMinutes As Integer = CInt(Math.Floor(value.TotalMinutes))','time minute flooring')
contains(Path('Component/Inputs/TimePicker/MASTimePicker.Parsing.vb'),'Return displayDate.ToString("t", CultureInfo.CurrentCulture)','time culture display')
contains(Path('Component/Inputs/TimePicker/MASTimePicker.ViewState.vb'),'If normalized.HasValue Then normalized = ClampToRange(normalized.Value)','time selection clamp')
contains(Path('Component/Inputs/CalendarView/MASCalendarView.vb'),'Private _showOutsideDays As Boolean = True','outside days default')
contains(Path('Component/Inputs/CalendarView/MASCalendarView.Helpers.vb'),'If normalized.HasValue Then SetDisplayMonthInternal(normalized.Value, False)','calendar selection month sync')
contains(Path('Component/Inputs/CalendarView/MASCalendarView.Helpers.vb'),'Dim normalized As Date = MASCalendarViewPolicy.NormalizeDisplayMonth(value)','display month normalization')
contains(Path('Component/Inputs/CalendarView/MASCalendarView.vb'),'If MASCalendarViewPolicy.IsDateEnabled(today, _minimumDate, _maximumDate) Then SetSelectedDateInternal(today, True)','MoveToday range policy')
contains(Path('Component/Inputs/CalendarView/MASCalendarView.vb'),'Public Function WithDateRange(minimumDate As Nullable(Of Date),','calendar range fluent API')
base=json.loads((root/'eng/tests/Nexamas.UI.PublicApiClassificationBaseline.json').read_text(encoding='utf-8-sig'))
classes={x['name']:x['category'] for x in base['classifications']}
for name in ['MASDatePicker','MASTimePicker','MASCalendarView']:
    checks.append((f'{name} Advanced classification',classes.get(name)=='Advanced'))
doc=(root/'docs/reference/controls/date-time-and-calendar.md').read_text(encoding='utf-8')
for phrase in ['does not round a selected minute to a multiple of `MinuteStep`','WithDateRange` swaps reversed supplied limits','classified **Advanced**']:
    checks.append((f'document claim: {phrase}',phrase in doc))
failed=[name for name,ok in checks if not ok]
for name,ok in checks: print(('PASS' if ok else 'FAIL')+': '+name)
print(f'Assertions: {len(checks)-len(failed)} passed, {len(failed)} failed')
sys.exit(1 if failed else 0)
