# By: Riasat Ullah
# This file contains test data for incident workflows.

from constants import var_names
from system_tests import test_tools
from system_tests.test_data import test_data_services, test_data_teams, test_data_users
import datetime


conference_bridges = [
    [11, 'Ops-Team Conference', None, '+19178654322', 'www.conf.com/khosdf0fwfn24f0dfsfdsfsd'],
    [15, 'Core-Team Conference', 'WEBEX', None, None, None],
    [19, 'Trading Conference', 'ZOOM', None, None]
]

conference_bridges_basic_list = [[item[1], item[0]] for item in conference_bridges]


incident_workflows_list = [
    {
        var_names.workflow_ref_id: test_tools.get_dummy_reference_id(),
        var_names.workflow_name: 'Major Impact Workflow',
        var_names.description: 'Run this workflow when multiple monitors get affected at the same time.',
        var_names.is_manual: True,
        var_names.trigger_method: ['TRIGGER', 'ACKNOWLEDGE', 'NOTATE'],
        var_names.run_permissions: test_data_teams.teams_basic_list[1],
        var_names.edit_permissions: None,
        var_names.is_enabled: True,
        var_names.last_run: datetime.datetime.now() - datetime.timedelta(days=1),
        var_names.conditions: True,
        var_names.actions: [var_names.new_responders, var_names.user_subscribers, var_names.team_subscribers,
                            var_names.status_update, var_names.conference_bridge],
    },
    {
        var_names.workflow_ref_id: test_tools.get_dummy_reference_id(),
        var_names.workflow_name: 'Assemble IT Team',
        var_names.description: 'This workflow is run to assemble the IT team',
        var_names.is_manual: True,
        var_names.trigger_method: None,
        var_names.run_permissions: test_data_teams.teams_basic_list[2],
        var_names.edit_permissions: test_data_teams.teams_basic_list[2],
        var_names.is_enabled: True,
        var_names.last_run: datetime.datetime.now(),
        var_names.conditions: False,
        var_names.actions: [var_names.email, var_names.send_sms],
    },
    {
        var_names.workflow_ref_id: test_tools.get_dummy_reference_id(),
        var_names.workflow_name: 'Critical Incident Workflow',
        var_names.description: 'This workflow should be run when critical incidents occur in the payments gateway.',
        var_names.is_manual: False,
        var_names.trigger_method: ['URGENCY AMENDMENT', 'RESOLVE'],
        var_names.run_permissions: None,
        var_names.edit_permissions: None,
        var_names.is_enabled: False,
        var_names.last_run: None,
        var_names.conditions: False,
        var_names.actions: [var_names.integration_id, var_names.reassign_to, var_names.send_chat_message,
                            var_names.notes],
    }
]


incident_workflows_basic_list = [[item[var_names.workflow_name], item[var_names.workflow_ref_id]]
                                 for item in incident_workflows_list]


incident_workflow_details = {
    incident_workflows_list[0][var_names.workflow_ref_id]: {
        var_names.workflow_ref_id: incident_workflows_list[0][var_names.workflow_ref_id],
        var_names.workflow_name: incident_workflows_list[0][var_names.workflow_name],
        var_names.description: incident_workflows_list[0][var_names.description],
        var_names.is_manual: True,
        var_names.trigger_method: ['TRIGGER', 'ACKNOWLEDGE', 'NOTATE'],
        var_names.run_permissions: test_data_teams.teams_basic_list[1][1],
        var_names.edit_permissions: None,
        var_names.is_enabled: True,
        var_names.last_run: datetime.datetime.now() - datetime.timedelta(days=1),
        var_names.workflow: [
            {var_names.actions: {var_names.user_subscribers: [
                test_data_users.users_list[1][1], test_data_users.users_list[4][1]]
            }},
            {
                var_names.block_if: {
                    var_names.conditions: [
                        {
                            'and': [
                                {
                                    var_names.logic: 'and',
                                    var_names.rule_type: 'service',
                                    var_names.field_name: 'service',
                                    var_names.comparator: 'equals',
                                    var_names.field_value: test_data_services.services_basic_list[1][1]
                                },
                                {
                                    var_names.logic: 'or',
                                    var_names.rule_type: 'email_to',
                                    var_names.field_name: 'email_to',
                                    var_names.comparator: 'not_equals',
                                    var_names.field_value: 'team@apollo.com'
                                },
                                {
                                    var_names.logic: 'and',
                                    var_names.rule_type: 'urgency_level',
                                    var_names.field_name: 'urgency_level',
                                    var_names.comparator: 'equals',
                                    var_names.field_value: 4
                                }
                            ],
                        },
                        {
                            'or': [
                                {
                                    var_names.logic: 'and',
                                    var_names.rule_type: 'payload_field',
                                    var_names.field_name: 'tags',
                                    var_names.comparator: 'contains',
                                    var_names.field_value: 'test'
                                }
                            ]
                        }
                    ],
                    var_names.workflow: [{
                        var_names.block_if: {
                            var_names.conditions: [
                                {
                                    'and': [
                                        {
                                            var_names.logic: 'and',
                                            var_names.rule_type: 'status',
                                            var_names.field_name: 'status',
                                            var_names.comparator: 'not_equals',
                                            var_names.field_value: 'RESOLVED'
                                        }
                                    ]
                                }
                            ],
                            var_names.workflow: [
                                {var_names.actions: {var_names.to_resolve: True}}
                            ]
                        },
                    }]
                },
                var_names.block_else: [
                    {
                        var_names.block_if: {
                            var_names.conditions: [
                                {
                                    'or': [
                                        {
                                            var_names.logic: 'and',
                                            var_names.rule_type: 'previous_action_http_status',
                                            var_names.field_name: 'previous_action_http_status',
                                            var_names.comparator: 'equals',
                                            var_names.field_value: '200'
                                        }
                                    ]
                                }
                            ],
                            var_names.workflow: [
                                {var_names.actions: {
                                    var_names.email: ['adam.smith@apollo.com'],
                                    var_names.email_subject: 'Incident #{{ incident_id }}: Response Content',
                                    var_names.text_msg: '{{ text_msg | *ACKNOWLEDGED* }}'
                                }},
                                {var_names.actions: {
                                    var_names.send_sms: ['{{ from_number }}'],
                                    var_names.text_msg: 'An incident has been created. Incident #{{ incident_id }}'
                                }}
                            ]
                        },
                        var_names.block_else: [
                            {var_names.actions: {
                                var_names.integration_id: test_data_services.custom_action_integrations[2][1]}}
                        ]
                    }
                ]
            },
            {var_names.actions: {var_names.team_subscribers: [test_data_teams.teams_basic_list[2][1]]}},
            {var_names.actions: {var_names.new_responders: [test_data_users.users_list[6][1]]}}
        ]
    },
    incident_workflows_list[1][var_names.workflow_ref_id]: {
        var_names.workflow_ref_id: incident_workflows_list[1][var_names.workflow_ref_id],
        var_names.workflow_name: incident_workflows_list[1][var_names.workflow_name],
        var_names.description: incident_workflows_list[1][var_names.description],
        var_names.is_manual: True,
        var_names.trigger_method: None,
        var_names.run_permissions: test_data_teams.teams_basic_list[2][1],
        var_names.edit_permissions: test_data_teams.teams_basic_list[2][1],
        var_names.is_enabled: True,
        var_names.last_run: datetime.datetime.now(),
        var_names.workflow: [
            {var_names.actions: {
                var_names.conference_bridge: conference_bridges_basic_list[0][1]
            }},
            {var_names.actions: {var_names.status_update: 'Expected downtime is 30 minutes. Please use EU site.'}}
        ]
    },
    incident_workflows_list[2][var_names.workflow_ref_id]: {
        var_names.workflow_ref_id: incident_workflows_list[2][var_names.workflow_ref_id],
        var_names.workflow_name: incident_workflows_list[2][var_names.workflow_name],
        var_names.description: incident_workflows_list[2][var_names.description],
        var_names.is_manual: False,
        var_names.trigger_method: ['URGENCY AMENDMENT', 'RESOLVE'],
        var_names.run_permissions: None,
        var_names.edit_permissions: None,
        var_names.is_enabled: False,
        var_names.last_run: None,
        var_names.workflow: [
            {
                var_names.block_if: {
                    var_names.conditions: [
                        {
                            'or': [
                                {
                                    var_names.logic: 'and',
                                    var_names.rule_type: 'workflow_not_run',
                                    var_names.field_name: 'workflow_not_run',
                                    var_names.comparator: None,
                                    var_names.field_value: None
                                }
                            ]
                        }
                    ],
                    var_names.workflow: [
                        {var_names.actions: {var_names.notes: 'Check major recovery guide to address issue'}},
                        {
                            var_names.actions: {
                                var_names.business_impact: [test_data_services.business_services_basic_list[1][1]]}
                        },
                        {
                            var_names.actions: {
                                var_names.send_chat_message: test_data_services.chat_integrations_basic_list[1][1],
                                var_names.text_msg: 'Incident #{{ incident_id }} acknowledged'
                            }
                        }
                    ]
                },
                var_names.block_else: [
                    {var_names.actions: {var_names.reassign_to: [test_data_users.users_list[3][1]]}}
                ]
            }
        ]
    }
}
