import pytest
import pandas as pd
import importlib
import numpy as np
from contextvars import copy_context
import dash
from dash._callback_context import context_value
from dash._utils import AttributeDict
code = importlib.import_module('tabs.observations')


#=================TEST OBS_TIME_SLIDER===========================
def test_obs_time_slider():
    #TEST DIV=OBS
    assert "Div(children=[Span(children=[DatePickerSingle(date='20220831', min_date_allowed=datetime.datetime(2012, 1, 20, 0, 0), max_date_allowed=datetime.datetime(2022, 8, 31, 0, 0), placeholder='DD MON YYYY', initial_visible_month=datetime.datetime(2022, 8, 31, 0, 0), display_format='DD MMM YYYY', id='obs-date-picker'), Button(id='clear_button', className='clear_button')], className='timesliderline'), Span(children=[Button(id='btn-obs-play', className='fa fa-play', n_clicks=0, title='Play')], className='timesliderline anim-buttons'), Span(children=Slider(min=0, max=23, step=1" in str(code.obs_time_slider(div='obs', start=0, end=23, step=1, start_date='20120120', end_date='20220831').children[0])

    #TEST DIV=OBS-VIS
    from utils import get_vis_edate
    from datetime import datetime
    hour = datetime.now().hour
    _, default_tstep = get_vis_edate('20220831', hour=hour)
    assert "NavbarSimple(children=[Div(children=[Span(children=[DatePickerSingle(date='20220831', min_date_allowed=datetime.datetime(2012, 1, 20, 0, 0), max_date_allowed=datetime.datetime(2022, 8, 31, 0, 0), placeholder='DD MON YYYY', initial_visible_month=datetime.datetime(2022, 8, 31, 0, 0), display_format='DD MMM YYYY', id='obs-vis-date-picker'), Button(id='clear_button', className='clear_button')], className='timesliderline'), None, Span(children=Slider(min=0, max=18, step=6, marks={0: {'label': '00-06'}, 6: {'label': '06-12'}, 12: {'label': '12-18'}, 18: {'label': '18-24', 'style': {'left': '', 'right': '-32px'}}}, value=0, id='obs-vis-slider-graph'), className='timesliderline')], className='timeslider')]" % { 'default_tstep': default_tstep } in str(code.obs_time_slider(div='obs-vis', start=0, end=18, step=6, start_date='20120120', end_date='20220831'))

    #TEST DIV = OBS-AOD
    assert "NavbarSimple(children=[Div(children=[Span(children=[DatePickerSingle(date='20210318', min_date_allowed=datetime.datetime(2023, 3, 30, 0, 0), max_date_allowed=datetime.datetime(2021, 3, 18, 0, 0), placeholder='DD MON YYYY', initial_visible_month=datetime.datetime(2021, 3, 18, 0, 0), display_format='DD MMM YYYY', id='obs-aod-date-picker'), Button(id='clear_button', className='clear_button')]" % { 'default_tstep': default_tstep }  in str (code.obs_time_slider(div='obs-aod', start=0, end=23, step=1))


#=================TEST SIDEBAR OBSERVATIONS ===========================
def test_sidebar_observations():
    assert "Button(children='EUMETSAT RGB', id='rgb', color='link', style={'fontWeight': 'bold'})" in str(code.sidebar_observations('rgb'))
    assert "Button(children='Visibility', id='visibility', color='link', style={'fontWeight': 'bold'})" in str(code.sidebar_observations('visibility'))


#=================TEST TAB_OBSERVATIONS===========================
def test_tab_observations():
    #TEST RGB    
    assert "All observations are kindly offered by Partners of the WMO Barcelona Dust Regional Center. RGB is a qualitative satellite product that indicates desert dust in the entire atmospheric column (represented by pink colour).']), className='description-body'), Div(children=[Button(children='HEMISPHERIC', id='btn-fulldisc', active=True), Button(children='MIDDLE EAST', id='btn-middleeast', active=False)], id='rgb-buttons'), Div(children=[Img(id='rgb-image', alt='EUMETSAT RGB - NOT AVAILABLE', src='./assets/eumetsat/FullDiscHD/archive/20220831/FRAME_OIS_RGB-dust-all_202208310000.gif'), Div(children=NavbarSimple(children=[Div(children=[Span(children=[DatePickerSingle(date='20220831', min_date_allowed=datetime.datetime(2012, 1, 20, 0, 0), max_date_allowed=datetime.datetime(2022, 8, 31, 0, 0), placeholder='DD MON YYYY', initial_visible_month=datetime.datetime(2022, 8, 31, 0, 0), display_format='DD MMM YYYY', id='obs-date-picker'), Button(id='clear_button', className='clear_button')]" in str(code.tab_observations('rgb', start_date='20120120', end_date='20220831'))

    #TEST VISIBILITY
    from utils import get_vis_edate
    from datetime import datetime
    hour = datetime.now().hour
    _, default_tstep = get_vis_edate('20220831', hour=hour)
    assert "id='obs-vis-graph', className='graph-with-slider'), Div(children=[NavbarSimple(children=[Div(children=[Span(children=[DatePickerSingle(date='20220831', min_date_allowed=datetime.datetime(2012, 1, 20, 0, 0), max_date_allowed=datetime.datetime(2022, 8, 31, 0, 0), placeholder='DD MON YYYY', initial_visible_month=datetime.datetime(2022, 8, 31, 0, 0), display_format='DD MMM YYYY', id='obs-vis-date-picker'), Button(id='clear_button', className='clear_button')], className='timesliderline'), None, Span(children=Slider(min=0, max=18, step=6, marks={0: {'label': '00-06'}, 6: {'label': '06-12'}, 12: {'label': '12-18'}, 18: {'label': '18-24', 'style': {'left': '', 'right': '-32px'}}}, value=0, id='obs-vis-slider-graph'), className='timesliderline')], className='timeslider')], id='rgb-navbar', className='fixed-bottom navbar-timebar', dark=True, expand='lg', fixed='bottom', fluid=True), Br(None), Br(None), Div(children=[Span(children=P('Dust data ©2023 WMO Barcelona Dust Regional Center.'), id='forecast-disclaimer')], className='disclaimer')], className='layout-dropdown rgb-layout-dropdown')], id='observations-tab', className='horizontal-menu', label='Observations', value='observations-tab')" % { 'default_tstep': default_tstep } in str(code.tab_observations('visibility', start_date='20120120', end_date='20220831'))
