# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
from typing import Any, Dict, List

# example V0 import/export format
dataset_ui_export: List[Dict[str, Any]] = [
    {
        "columns": [
            {
                "column_name": "num_california",
                "expression": "CASE WHEN state = 'CA' THEN num ELSE 0 END",
            },
            {"column_name": "ds", "is_dttm": True, "type": "DATETIME"},
            {"column_name": "state", "type": "VARCHAR(10)"},
            {"column_name": "gender", "type": "VARCHAR(16)"},
            {"column_name": "name", "type": "VARCHAR(255)"},
            {"column_name": "num_boys", "type": "BIGINT"},
            {"column_name": "num_girls", "type": "BIGINT"},
            {"column_name": "num", "type": "BIGINT"},
        ],
        "filter_select_enabled": True,
        "main_dttm_col": "ds",
        "metrics": [
            {
                "expression": "COUNT(*)",
                "metric_name": "count",
                "metric_type": "count",
                "verbose_name": "COUNT(*)",
            },
            {"expression": "SUM(num)", "metric_name": "sum__num"},
        ],
        "params": '{"remote_id": 3, "database_name": "examples", "import_time": 1604342885}',
        "table_name": "birth_names_2",
    }
]

dataset_cli_export: Dict[str, Any] = {
    "databases": [
        {
            "allow_run_async": True,
            "database_name": "examples",
            "sqlalchemy_uri": "sqlite:////Users/beto/.superset/superset.db",
            "tables": dataset_ui_export,
        }
    ]
}

dashboard_export: Dict[str, Any] = {
    "dashboards": [
        {
            "__Dashboard__": {
                "css": "",
                "dashboard_title": "Births 2",
                "description": None,
                "json_metadata": '{"timed_refresh_immune_slices": [], "expanded_slices": {}, "refresh_frequency": 0, "default_filters": "{}", "color_scheme": null, "remote_id": 1}',
                "position_json": '{"CHART--jvaBFZx78":{"children":[],"id":"CHART--jvaBFZx78","meta":{"chartId":83,"height":50,"sliceName":"Number of California Births","uuid":"c77bb4b3-09f4-4d9a-a9e2-66a627c64343","width":4},"parents":["ROOT_ID","GRID_ID","ROW-se_5H8KNiO"],"type":"CHART"},"DASHBOARD_VERSION_KEY":"v2","GRID_ID":{"children":["ROW-se_5H8KNiO"],"id":"GRID_ID","parents":["ROOT_ID"],"type":"GRID"},"HEADER_ID":{"id":"HEADER_ID","meta":{"text":"Births"},"type":"HEADER"},"ROOT_ID":{"children":["GRID_ID"],"id":"ROOT_ID","type":"ROOT"},"ROW-se_5H8KNiO":{"children":["CHART--jvaBFZx78"],"id":"ROW-se_5H8KNiO","meta":{"background":"BACKGROUND_TRANSPARENT"},"parents":["ROOT_ID","GRID_ID"],"type":"ROW"}}',
                "slices": [
                    {
                        "__Slice__": {
                            "cache_timeout": None,
                            "datasource_name": "birth_names_2",
                            "datasource_type": "table",
                            "id": 83,
                            "params": '{"adhoc_filters": [], "datasource": "3__table", "granularity_sqla": "ds", "header_font_size": 0.4, "metric": {"aggregate": "SUM", "column": {"column_name": "num_california", "expression": "CASE WHEN state = \'CA\' THEN num ELSE 0 END"}, "expressionType": "SIMPLE", "label": "SUM(num_california)"}, "slice_id": 83, "subheader_font_size": 0.15, "time_range": "100 years ago : now", "url_params": {}, "viz_type": "big_number_total", "y_axis_format": "SMART_NUMBER", "remote_id": 83, "datasource_name": "birth_names_2", "schema": null, "database_name": "examples"}',
                            "slice_name": "Number of California Births",
                            "viz_type": "big_number_total",
                        }
                    }
                ],
                "slug": None,
            }
        }
    ],
    "datasources": [
        {
            "__SqlaTable__": {
                "cache_timeout": None,
                "columns": [
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "ds",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 332,
                            "is_active": True,
                            "is_dttm": True,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "DATETIME",
                            "uuid": "98e22f20-ed71-4483-b09d-31780ed1fc1b",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "gender",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 333,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "VARCHAR(16)",
                            "uuid": "08e08f02-fb81-4461-bba6-c8c8dfef0c02",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "name",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 334,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "VARCHAR(255)",
                            "uuid": "c67b14d9-fc4b-427d-a363-a53af015fb5e",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "num",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 335,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "BIGINT",
                            "uuid": "69835b93-7169-4a2c-baa7-c1c92f21d10a",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "state",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 336,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "VARCHAR(10)",
                            "uuid": "80003ad0-bdd0-48d3-ade3-8d1838e07d7a",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "num_boys",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 337,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "BIGINT",
                            "uuid": "8373ed24-4d4e-4307-9eee-8deefeecbb57",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "column_name": "num_girls",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "description": None,
                            "expression": None,
                            "filterable": True,
                            "groupby": True,
                            "id": 338,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": "BIGINT",
                            "uuid": "46f2de5f-c008-4024-a163-0b5c5f1d5580",
                            "verbose_name": None,
                        }
                    },
                    {
                        "__TableColumn__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:32"},
                            "column_name": "num_california",
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:32"},
                            "description": None,
                            "expression": "CASE WHEN state = 'CA' THEN num ELSE 0 END",
                            "filterable": True,
                            "groupby": True,
                            "id": 434,
                            "is_active": True,
                            "is_dttm": False,
                            "python_date_format": None,
                            "table_id": 3,
                            "type": None,
                            "uuid": "35e32aa6-be2b-4086-9c78-4ea3351ec079",
                            "verbose_name": None,
                        }
                    },
                ],
                "database_id": 1000,
                "default_endpoint": None,
                "description": None,
                "extra": None,
                "fetch_values_predicate": None,
                "filter_select_enabled": True,
                "main_dttm_col": "ds",
                "metrics": [
                    {
                        "__SqlMetric__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "d3format": None,
                            "description": None,
                            "expression": "COUNT(*)",
                            "extra": None,
                            "id": 9,
                            "metric_name": "count",
                            "metric_type": "count",
                            "table_id": 3,
                            "uuid": "1042ef50-ebf9-4271-b44e-3aaa891f6c21",
                            "verbose_name": "COUNT(*)",
                            "warning_text": None,
                        }
                    },
                    {
                        "__SqlMetric__": {
                            "changed_by_fk": None,
                            "changed_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "created_by_fk": None,
                            "created_on": {"__datetime__": "2020-10-07T15:50:00"},
                            "d3format": None,
                            "description": None,
                            "expression": "SUM(num)",
                            "extra": None,
                            "id": 10,
                            "metric_name": "sum__num",
                            "metric_type": None,
                            "table_id": 3,
                            "uuid": "d807f208-e3c6-4b89-b790-41f521216ff6",
                            "verbose_name": None,
                            "warning_text": None,
                        }
                    },
                ],
                "offset": 0,
                "params": '{"remote_id": 3, "database_name": "examples", "import_time": 1604342885}',
                "schema": None,
                "sql": None,
                "table_name": "birth_names_2",
                "template_params": None,
            }
        }
    ],
}

# example V1 import/export format
database_metadata_config: Dict[str, Any] = {
    "version": "1.0.0",
    "type": "Database",
    "timestamp": "2020-11-04T21:27:44.423819+00:00",
}

dataset_metadata_config: Dict[str, Any] = {
    "version": "1.0.0",
    "type": "SqlaTable",
    "timestamp": "2020-11-04T21:27:44.423819+00:00",
}

chart_metadata_config: Dict[str, Any] = {
    "version": "1.0.0",
    "type": "Slice",
    "timestamp": "2020-11-04T21:27:44.423819+00:00",
}

dashboard_metadata_config: Dict[str, Any] = {
    "version": "1.0.0",
    "type": "Dashboard",
    "timestamp": "2020-11-04T21:27:44.423819+00:00",
}
saved_queries_metadata_config: Dict[str, Any] = {
    "version": "1.0.0",
    "type": "SavedQuery",
    "timestamp": "2021-03-30T20:37:54.791187+00:00",
}
database_config: Dict[str, Any] = {
    "allow_csv_upload": True,
    "allow_ctas": True,
    "allow_cvas": True,
    "allow_run_async": False,
    "cache_timeout": None,
    "database_name": "imported_database",
    "expose_in_sqllab": True,
    "extra": {},
    "sqlalchemy_uri": "sqlite:///test.db",
    "uuid": "b8a1ccd3-779d-4ab7-8ad8-9ab119d7fe89",
    "version": "1.0.0",
}

dataset_config: Dict[str, Any] = {
    "table_name": "imported_dataset",
    "main_dttm_col": None,
    "description": "This is a dataset that was exported",
    "default_endpoint": "",
    "offset": 66,
    "cache_timeout": 55,
    "schema": "",
    "sql": "",
    "params": None,
    "template_params": {},
    "filter_select_enabled": True,
    "fetch_values_predicate": None,
    "extra": '{ "certification": { "certified_by": "Data Platform Team", "details": "This table is the source of truth." }, "warning_markdown": "This is a warning." }',
    "metrics": [
        {
            "metric_name": "count",
            "verbose_name": "",
            "metric_type": None,
            "expression": "count(1)",
            "description": None,
            "d3format": None,
            "extra": {},
            "warning_text": None,
        },
    ],
    "columns": [
        {
            "column_name": "cnt",
            "verbose_name": "Count of something",
            "is_dttm": False,
            "is_active": None,
            "type": "NUMBER",
            "groupby": False,
            "filterable": True,
            "expression": "",
            "description": None,
            "python_date_format": None,
        },
    ],
    "version": "1.0.0",
    "uuid": "10808100-158b-42c4-842e-f32b99d88dfb",
    "database_uuid": "b8a1ccd3-779d-4ab7-8ad8-9ab119d7fe89",
}

chart_config: Dict[str, Any] = {
    "slice_name": "Deck Path",
    "viz_type": "deck_path",
    "params": {
        "color_picker": {"a": 1, "b": 135, "g": 122, "r": 0},
        "datasource": "12__table",
        "js_columns": ["color"],
        "js_data_mutator": r"data => data.map(d => ({\n    ...d,\n    color: colors.hexToRGB(d.extraProps.color)\n}));",
        "js_onclick_href": "",
        "js_tooltip": "",
        "line_column": "path_json",
        "line_type": "json",
        "line_width": 150,
        "mapbox_style": "mapbox://styles/mapbox/light-v9",
        "reverse_long_lat": False,
        "row_limit": 5000,
        "slice_id": 43,
        "time_grain_sqla": None,
        "time_range": " : ",
        "viewport": {
            "altitude": 1.5,
            "bearing": 0,
            "height": 1094,
            "latitude": 37.73671752604488,
            "longitude": -122.18885402582598,
            "maxLatitude": 85.05113,
            "maxPitch": 60,
            "maxZoom": 20,
            "minLatitude": -85.05113,
            "minPitch": 0,
            "minZoom": 0,
            "pitch": 0,
            "width": 669,
            "zoom": 9.51847667620428,
        },
        "viz_type": "deck_path",
    },
    "query_context": '{"datasource":{"id":12,"type":"table"},"force":false,"queries":[{"time_range":" : ","filters":[],"extras":{"time_grain_sqla":null,"having":"","having_druid":[],"where":""},"applied_time_extras":{},"columns":[],"metrics":[],"annotation_layers":[],"row_limit":5000,"timeseries_limit":0,"order_desc":true,"url_params":{},"custom_params":{},"custom_form_data":{}}],"result_format":"json","result_type":"full"}',
    "cache_timeout": None,
    "uuid": "0c23747a-6528-4629-97bf-e4b78d3b9df1",
    "version": "1.0.0",
    "dataset_uuid": "10808100-158b-42c4-842e-f32b99d88dfb",
}

dashboard_config: Dict[str, Any] = {
    "dashboard_title": "Test dash",
    "description": None,
    "css": "",
    "slug": None,
    "uuid": "c4b28c4e-a1fe-4cf8-a5ac-d6f11d6fdd51",
    "position": {
        "CHART-SVAlICPOSJ": {
            "children": [],
            "id": "CHART-SVAlICPOSJ",
            "meta": {
                "chartId": 83,
                "height": 50,
                "sliceName": "Number of California Births",
                "uuid": "0c23747a-6528-4629-97bf-e4b78d3b9df1",
                "width": 4,
            },
            "parents": ["ROOT_ID", "GRID_ID", "ROW-dP_CHaK2q"],
            "type": "CHART",
        },
        "DASHBOARD_VERSION_KEY": "v2",
        "GRID_ID": {
            "children": ["ROW-dP_CHaK2q"],
            "id": "GRID_ID",
            "parents": ["ROOT_ID"],
            "type": "GRID",
        },
        "HEADER_ID": {
            "id": "HEADER_ID",
            "meta": {"text": "Test dash"},
            "type": "HEADER",
        },
        "ROOT_ID": {"children": ["GRID_ID"], "id": "ROOT_ID", "type": "ROOT"},
        "ROW-dP_CHaK2q": {
            "children": ["CHART-SVAlICPOSJ"],
            "id": "ROW-dP_CHaK2q",
            "meta": {"0": "ROOT_ID", "background": "BACKGROUND_TRANSPARENT"},
            "parents": ["ROOT_ID", "GRID_ID"],
            "type": "ROW",
        },
    },
    "metadata": {
        "timed_refresh_immune_slices": [83],
        "filter_scopes": {
            "83": {"region": {"scope": ["ROOT_ID"], "immune": [83]}},
        },
        "expanded_slices": {"83": True},
        "refresh_frequency": 0,
        "default_filters": "{}",
        "color_scheme": None,
        "remote_id": 7,
        "import_time": 1604342885,
    },
    "version": "1.0.0",
}
saved_queries_config = {
    "schema": "public",
    "label": "Test Saved Query",
    "description": None,
    "sql": "-- Note: Unless you save your query, these tabs will NOT persist if you clear\nyour cookies or change browsers.\n\n\nSELECT * from birth_names",
    "uuid": "05b679b5-8eaf-452c-b874-a7a774cfa4e9",
    "version": "1.0.0",
    "database_uuid": "b8a1ccd3-779d-4ab7-8ad8-9ab119d7fe89",
}
