# By: Riasat Ullah
# This file contains test data for routines and escalation policies.

from constants import static_vars, var_names
from system_tests import test_tools
from system_tests.test_data import test_data_users
import datetime


today = datetime.datetime.now()

# Policies list
policies_list = [
    {
        var_names.policy_ref_id: test_tools.get_dummy_reference_id(),
        var_names.policy_name: 'Operations Escalation Policy',
        var_names.on_call: [
            [test_data_users.users_list[0]],
            [test_data_users.users_list[1], test_data_users.users_list[2]],
            [test_data_users.users_list[0]]
        ],
        var_names.associated_services: [
            ['Trading Systems', test_tools.get_dummy_reference_id()],
            ['Payments Gateway', test_tools.get_dummy_reference_id()]
        ]
    },
    {
        var_names.policy_ref_id: test_tools.get_dummy_reference_id(),
        var_names.policy_name: 'Core Escalation Policy',
        var_names.on_call: [
            [test_data_users.users_list[2]],
            [test_data_users.users_list[1]]
        ],
        var_names.associated_services: []
    },
    {
        var_names.policy_ref_id: test_tools.get_dummy_reference_id(),
        var_names.policy_name: 'SANS Team Policy',
        var_names.on_call: [
            [test_data_users.users_list[1]],
            [test_data_users.users_list[0]]
        ],
        var_names.associated_services: [
            ['Market Data', test_tools.get_dummy_reference_id()]
        ]
    },
    {
        var_names.policy_ref_id: test_tools.get_dummy_reference_id(),
        var_names.policy_name: 'OWED Team Policy',
        var_names.on_call: [
            [test_data_users.users_list[0]],
            [test_data_users.users_list[2]]
        ],
        var_names.associated_services: [
            ['Product Database', test_tools.get_dummy_reference_id()]
        ]
    }
]


# Policies basic list
policies_basic_list = [[item[var_names.policy_name], item[var_names.policy_ref_id]] for item in policies_list]


# Routines list
routines_list = [
    {
        var_names.routine_ref_id: test_tools.get_dummy_reference_id(),
        var_names.routine_name: 'Operations Team Routine',
        var_names.timezone: 'US/Eastern',
        var_names.associated_policies: [policies_basic_list[0], policies_basic_list[1]]
    },
    {
        var_names.routine_ref_id: test_tools.get_dummy_reference_id(),
        var_names.routine_name: 'Core Team Routine',
        var_names.timezone: 'US/Eastern',
        var_names.associated_policies: []
    },
    {
        var_names.routine_ref_id: test_tools.get_dummy_reference_id(),
        var_names.routine_name: 'PM Team Routine',
        var_names.timezone: 'Europe/Madrid',
        var_names.associated_policies: [policies_basic_list[2]]
    }
]


# Routines basic list
routines_basic_list = [[item[var_names.routine_name], item[var_names.routine_ref_id]] for item in routines_list]


# Routine Details
routine_details = {
    routines_list[0][var_names.routine_ref_id]: {
        var_names.routine_ref_id: routines_list[0][var_names.routine_ref_id],
        var_names.routine_name: routines_list[0][var_names.routine_name],
        var_names.timezone: routines_list[0][var_names.timezone],
        var_names.associated_policies: routines_list[0][var_names.associated_policies],
        var_names.routine_layers: [
            {
                var_names.layer: 1,
                var_names.layer_name: 'Weekdays',
                var_names.valid_start: "2024-10-28",
                var_names.valid_end: "9999-01-01",
                var_names.is_exception: False,
                var_names.rotation_start: '09:00',
                var_names.shift_length: '24:00',
                var_names.rotation_frequency: 1,
                var_names.skip_days: None,
                var_names.rotations: [
                    [test_data_users.users_list[0]],
                    [test_data_users.users_list[1]],
                    [test_data_users.users_list[9]],
                    [test_data_users.users_list[16]],
                    [test_data_users.users_list[8]],
                    [test_data_users.users_list[10]]
                ]
            }#,
            # {
            #     var_names.layer: 2,
            #     var_names.layer_name: 'Weekend Shift',
            #     var_names.valid_start: "2024-10-18",
            #     var_names.valid_end: "2024-10-18",
            #     var_names.is_exception: True,
            #     var_names.rotation_start: '00:00',
            #     var_names.shift_length: '24:00',
            #     var_names.rotation_frequency: 1,
            #     var_names.skip_days: None,
            #     var_names.rotations: [
            #         [test_data_users.users_list[0]]
            #     ]
            # },
            # {
            #     var_names.layer: 2,
            #     var_names.layer_name: 'Weekend Shift',
            #     var_names.valid_start: "2024-10-06",
            #     var_names.valid_end: "2024-10-16",
            #     var_names.is_exception: True,
            #     var_names.rotation_start: '00:00',
            #     var_names.shift_length: '09:00',
            #     var_names.rotation_frequency: 7,
            #     var_names.skip_days: None,
            #     var_names.rotations: [[test_data_users.users_list[2]]]
            # }
        ]
    },
    routines_list[1][var_names.routine_ref_id]: {
        var_names.routine_ref_id: routines_list[1][var_names.routine_ref_id],
        var_names.routine_name: routines_list[1][var_names.routine_name],
        var_names.timezone: routines_list[1][var_names.timezone],
        var_names.associated_policies: routines_list[1][var_names.associated_policies],
        var_names.routine_layers: [
            {
                var_names.layer: 1,
                var_names.valid_start: "2018-10-15",
                var_names.valid_end: "9999-01-01",
                var_names.is_exception: False,
                var_names.rotation_start: '00:00',
                var_names.shift_length: '04:00',
                var_names.rotation_frequency: 2,
                var_names.skip_days: None,
                var_names.rotations: [
                    [test_data_users.users_list[0]],
                    [test_data_users.users_list[2]]
                ]
            }
        ]
    },
    routines_list[2][var_names.routine_ref_id]: {
        var_names.routine_ref_id: routines_list[2][var_names.routine_ref_id],
        var_names.routine_name: routines_list[2][var_names.routine_name],
        var_names.timezone: routines_list[2][var_names.timezone],
        var_names.associated_policies: routines_list[2][var_names.associated_policies],
        var_names.routine_layers: [
            {
                var_names.layer: 1,
                var_names.valid_start: "2018-10-15",
                var_names.valid_end: "9999-01-01",
                var_names.is_exception: False,
                var_names.rotation_start: '00:00',
                var_names.shift_length: '24:00',
                var_names.rotation_frequency: 1,
                var_names.skip_days: [5, 6],
                var_names.rotations: [
                    [test_data_users.users_list[0], test_data_users.users_list[2]],
                    [test_data_users.users_list[1]]
                ]
            },
            {
                var_names.layer: 1,
                var_names.valid_start: "2018-10-15",
                var_names.valid_end: "9999-01-01",
                var_names.is_exception: False,
                var_names.rotation_start: '00:00',
                var_names.shift_length: '24:00',
                var_names.rotation_frequency: 1,
                var_names.skip_days: None,
                var_names.rotations: [
                    [test_data_users.users_list[2]]
                ]
            },
            {
                var_names.layer: 3,
                var_names.valid_start: "2019-12-21",
                var_names.valid_end: "2019-12-29",
                var_names.is_exception: True,
                var_names.rotation_start: '00:00',
                var_names.shift_length: '24:00',
                var_names.rotation_frequency: 2,
                var_names.skip_days: [0, 1, 2, 3, 4],
                var_names.rotations: [
                    [test_data_users.users_list[2]]
                ]
            }
        ]
    }
}


# Policy Details
policy_details = {
    policies_list[0][var_names.policy_ref_id]: {
        var_names.policy_ref_id: policies_list[0][var_names.policy_ref_id],
        var_names.policy_name: policies_list[0][var_names.policy_name],
        var_names.on_call: policies_list[0][var_names.on_call],
        var_names.associated_services: policies_list[0][var_names.associated_services],
        var_names.levels: [
            {
                var_names.assignee_level: 1,
                var_names.level_minutes: 15,
                var_names.routines: [routines_basic_list[2]]
            },
            {
                var_names.assignee_level: 2,
                var_names.level_minutes: 30,
                var_names.routines: [routines_basic_list[0]]
            },
            {
                var_names.assignee_level: 3,
                var_names.level_minutes: 30,
                var_names.routines: [routines_basic_list[2]]
            }
        ],
        var_names.tags: ['apac', 'euro']
    },
    policies_list[1][var_names.policy_ref_id]: {
        var_names.policy_ref_id: policies_list[1][var_names.policy_ref_id],
        var_names.policy_name: policies_list[1][var_names.policy_name],
        var_names.on_call: policies_list[1][var_names.on_call],
        var_names.associated_services: policies_list[1][var_names.associated_services],
        var_names.levels: [
            {
                var_names.assignee_level: 1,
                var_names.level_minutes: 15,
                var_names.routines: [routines_basic_list[1]]
            },
            {
                var_names.assignee_level: 2,
                var_names.level_minutes: 15,
                var_names.routines: [routines_basic_list[2]]
            }
        ]
    },
    policies_list[2][var_names.policy_ref_id]: {
        var_names.policy_ref_id: policies_list[2][var_names.policy_ref_id],
        var_names.policy_name: policies_list[2][var_names.policy_name],
        var_names.on_call: policies_list[2][var_names.on_call],
        var_names.associated_services: policies_list[2][var_names.associated_services],
        var_names.levels: [
            {
                var_names.assignee_level: 1,
                var_names.level_minutes: 10,
                var_names.routines: [routines_basic_list[0]]
            }
        ]
    },
    policies_list[3][var_names.policy_ref_id]: {
        var_names.policy_ref_id: policies_list[3][var_names.policy_ref_id],
        var_names.policy_name: policies_list[3][var_names.policy_name],
        var_names.on_call: policies_list[3][var_names.on_call],
        var_names.associated_services: policies_list[3][var_names.associated_services],
        var_names.levels: [
            {
                var_names.assignee_level: 1,
                var_names.level_minutes: 12,
                var_names.routines: [routines_basic_list[1]]
            },
            {
                var_names.assignee_level: 2,
                var_names.level_minutes: 12,
                var_names.routines: [routines_basic_list[0]]
            }
        ]
    }
}


# dashboard data package
dashboard_package = {
    var_names.open_incident_count: [4, 7],
    var_names.acknowledged_incident_count: [6, 11],
    var_names.resolved_incident_count: 96,
    var_names.on_call_shifts: [{
        var_names.key: [policies_list[0][var_names.policy_name] + ' (L1)',
                        policies_list[0][var_names.policy_ref_id], 1],
        var_names.policy_name: policies_list[0][var_names.policy_name],
        var_names.policy_ref_id: policies_list[0][var_names.policy_ref_id],
        var_names.assignee_level: 1,
        var_names.routine_ref_id: routines_list[0][var_names.routine_ref_id],
        var_names.for_group: True
    }, {
        var_names.key: [policies_list[1][var_names.policy_name] + ' (L2)',
                        policies_list[1][var_names.policy_ref_id], 2],
        var_names.policy_name: policies_list[1][var_names.policy_name],
        var_names.policy_ref_id: policies_list[1][var_names.policy_ref_id],
        var_names.assignee_level: 2,
        var_names.routine_ref_id: routines_list[1][var_names.routine_ref_id],
        var_names.for_group: False
    }, {
        var_names.key: [policies_list[2][var_names.policy_name] + ' (L2)',
                        policies_list[2][var_names.policy_ref_id], 2],
        var_names.policy_name: policies_list[2][var_names.policy_name],
        var_names.policy_ref_id: policies_list[2][var_names.policy_ref_id],
        var_names.assignee_level: 2,
        var_names.routine_ref_id: routines_list[2][var_names.routine_ref_id],
        var_names.for_group: False
    }],
    var_names.on_call: [{
        var_names.key: [policies_list[0][var_names.policy_name] + ' (L1)',
                        policies_list[0][var_names.policy_ref_id], 1],
        var_names.policy_name: policies_list[0][var_names.policy_name],
        var_names.policy_ref_id: policies_list[0][var_names.policy_ref_id],
        var_names.assignee_level: 1,
        var_names.routine_ref_id: routines_list[0][var_names.routine_ref_id],
        var_names.for_group: True,
        var_names.start_period: datetime.datetime.combine(
            (today - datetime.timedelta(days=3)).date(), datetime.time(8, 0)),
        var_names.end_period: datetime.datetime.combine(
            (today + datetime.timedelta(days=3)).date(), datetime.time(8, 0))
    }, {
        var_names.key: [policies_list[1][var_names.policy_name] + ' (L2)',
                        policies_list[1][var_names.policy_ref_id], 2],
        var_names.policy_name: policies_list[1][var_names.policy_name],
        var_names.policy_ref_id: policies_list[1][var_names.policy_ref_id],
        var_names.assignee_level: 2,
        var_names.routine_ref_id: routines_list[1][var_names.routine_ref_id],
        var_names.for_group: False,
        # var_names.start_period: datetime.datetime.combine(today.date(), datetime.time(0, 0)),
        # var_names.end_period: datetime.datetime.combine(today.date(), datetime.time(23, 59, 59))
        var_names.start_period: datetime.datetime.combine(
            (today - datetime.timedelta(days=3)).date(), datetime.time(8, 0)),
        var_names.end_period: datetime.datetime.combine(
            (today + datetime.timedelta(days=3)).date(), datetime.time(8, 0))
    }],
    var_names.next_on_call: [{
        var_names.key: [policies_list[1][var_names.policy_name] + ' (L2)',
                        policies_list[1][var_names.policy_ref_id], 2],
        var_names.policy_name: policies_list[1][var_names.policy_name],
        var_names.policy_ref_id: policies_list[1][var_names.policy_ref_id],
        var_names.assignee_level: 2,
        var_names.routine_ref_id: routines_list[1][var_names.routine_ref_id],
        var_names.for_group: False,
        var_names.start_period: datetime.datetime.combine(
            (today + datetime.timedelta(days=2)).date(), datetime.time(0, 0)),
        var_names.end_period: datetime.datetime.combine(
            (today + datetime.timedelta(days=2)).date(), datetime.time(23, 59, 59))
    }]
}


on_call_schedule = {
    var_names.display_name: 'Adam Smith',
    var_names.preferred_username: 'adsmi',
    var_names.timezone: 'US/Eastern',
    var_names.data: [[], [], []],
    var_names.on_call_shifts: dashboard_package[var_names.on_call_shifts],
    var_names.on_call: dashboard_package[var_names.on_call],
    var_names.next_on_call: dashboard_package[var_names.next_on_call]
}

for i in range(0, 42):
    if i < 7:
        on_call_schedule[var_names.data][0].append(
            {var_names.rotation_start: datetime.datetime(2024, 10, 24, 0, 0) + datetime.timedelta(days=i),
             var_names.rotation_end: datetime.datetime(2024, 10, 25, 0, 0) + datetime.timedelta(days=i),
             var_names.on_call: [dashboard_package[var_names.on_call_shifts][0][var_names.key]]}
        )
    if 5 < i < 13:
        on_call_schedule[var_names.data][1].append(
            {var_names.rotation_start: datetime.datetime(2024, 10, 24, 0, 0) + datetime.timedelta(days=i),
             var_names.rotation_end: datetime.datetime(2024, 10, 25, 0, 0) + datetime.timedelta(days=i),
             var_names.on_call: [dashboard_package[var_names.on_call_shifts][1][var_names.key]]}
        )
    if i > 13:
        on_call_schedule[var_names.data][2].append(
            {var_names.rotation_start: datetime.datetime(2024, 10, 24, 0, 0) + datetime.timedelta(days=i),
             var_names.rotation_end: datetime.datetime(2024, 10, 25, 0, 0) + datetime.timedelta(days=i),
             var_names.on_call: [dashboard_package[var_names.on_call_shifts][2][var_names.key]]}
        )

routine_schedule = {
    var_names.display_name: routines_list[0][var_names.routine_name],
    var_names.routine_ref_id: routines_list[0][var_names.routine_ref_id],
    var_names.timezone: 'US/Eastern',
    var_names.data: [
        [{var_names.rotation_start: (datetime.datetime.combine(datetime.datetime.now(), datetime.time(9, 0)) +
                                     datetime.timedelta(days=i)).strftime(static_vars.json_timestamp_format),
          var_names.rotation_end: (datetime.datetime.combine(datetime.datetime.now(), datetime.time(21, 0)) +
                                   datetime.timedelta(days=i)).strftime(static_vars.json_timestamp_format),
          var_names.on_call: [['Adam Smith', 'adsmi'] if i % 2 == 0 else ['Ashley Haining', 'ashai']]}
         for i in range(-12, 30)],
        [{var_names.rotation_start: (datetime.datetime.combine(datetime.datetime.now(), datetime.time(21, 0)) +
                                     datetime.timedelta(days=i)).strftime(static_vars.json_timestamp_format),
          var_names.rotation_end: (datetime.datetime.combine(datetime.datetime.now(), datetime.time(9, 0)) +
                                   datetime.timedelta(days=i+1)).strftime(static_vars.json_timestamp_format),
          var_names.on_call: [['Rachel Bosch', 'rabos'] if i % 2 == 0 else ['Rahul Vinod', 'ravin']]}
         for i in range(-12, 30)]
    ],
    var_names.on_call_shifts: [
        [['Adam Smith', 'adsmi']],
        [['Adam Smith', 'adsmi'], ['Ashley Haining', 'ashai']],
        [['Ashley Haining', 'ashai']],
        [['Rachel Bosch', 'rabos']],
        [['Rahul Vinod', 'ravin']]
    ]
}
