import pandas as pd
from utils.s3 import save_csv_to_s3


def app():
    # This is the payload to be used to extract the energy assessment data from s3 and upload it to the database,
    # as well as produce links to each of the uploaded documents.

    portfolio_id = 101

    body = {
        "portfolio_id": portfolio_id,
        "surveyor": "JAFFERSONS ENERGY CONSULTANTS",
        "project_code": "VEC001",
    }
    # 5 Grove Mansions
    # These are the recommendations based on the on-site survey of the property.
    non_intrusive_recommendations = [
        {
            # 2 Grove Mansions
            "uprn": 121016121,
            "recommendations": [
                {
                    "type": "draught_proofing",
                    "cost": 100,
                    "survey": True,
                    "sap_points": 1
                },
                {
                    "type": "mixed_glazing", "cost": 14632, "survey": True,
                    "description": "Install double glazing to north facing windows and secondary glazing to the "
                                   "remaining windows at the front of the building",
                    "sap_points": 3
                },
                {"type": "trickle_vents", "cost": 1000, "survey": True},
                {"type": "suspended_floor_insulation", "cost": None, "survey": True, "sap_points": 2},
                {"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 5},
            ]
        },
        {
            # 8 Grove Mansions
            "uprn": 10024087855,
            "recommendations": [
                {"type": "draught_proofing", "cost": 100, "survey": True, "sap_points": 2},
                {
                    "type": "mixed_glazing", "cost": 7814, "survey": True,
                    "description": "Install double glazing to north facing windows and secondary glazing to the "
                                   "remaining windows at the front of the building",
                    "sap_points": 4
                },
                {"type": "trickle_vents", "cost": 700, "survey": True},
                {"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 0},
                {"type": "internal_wall_insulation", "cost": None, "survey": True, 'sap_points': 5},
            ]
        },
        {
            # 9 Grove Mansions
            "uprn": 121016128,
            "recommendations": [
                {"type": "draught_proofing", "cost": 100, "survey": True, "sap_points": 1},
                {
                    "type": "mixed_glazing", "cost": 9740, "survey": True,
                    "description": "Install double glazing to north facing windows and secondary glazing to the "
                                   "remaining windows at the front of the building",
                    "sap_points": 3
                },
                {"type": "trickle_vents", "cost": 1000, "survey": True},
                {"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 1},
                {"type": "suspended_floor_insulation", "cost": None, "sap_points": 1},
                {"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 6},
            ]
        },
        {
            # 5 Grove Mansions
            "uprn": 121016124,
            "recommendations": [
                {
                    "type": "mixed_glazing", "cost": 12662, "survey": True,
                    "description": "Install double glazing to north facing windows and secondary glazing to the "
                                   "remaining windows at the front of the building",
                    "sap_points": 5
                },
                {"type": "trickle_vents", "cost": 1300, "survey": True},
                {"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 2},
                {"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 8},
            ]
        },
        {
            # 14 Grove Mansions
            "uprn": 121016117,
            "recommendations": [
                {"type": "draught_proofing", "cost": 100, "survey": True, "sap_points": 1},
                {
                    "type": "mixed_glazing", "cost": 10736, "survey": True,
                    "description": "Install double glazing to north facing windows and secondary glazing to the "
                                   "remaining windows at the front of the building",
                    "sap_points": 4
                },
                {"type": "trickle_vents", "cost": 1000, "survey": True},
                {"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 1},
                {"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 6},
            ]
        },
        {
            # 19 Grove Mansions
            "uprn": 10024087902,
            "recommendations": [
                {"type": "low_energy_lighting", "cost": None, "survey": True, "sap_points": 0},
                {"type": "internal_wall_insulation", "cost": None, "survey": True, "sap_points": 2},
                {"type": "room_roof_insulation", "cost": None, "survey": True, "sap_points": 16},
            ]
        },
    ]

    asset_list = [
        # These are properties where we've done a survey
        {
            "uprn": 121016121, "address": "", "postcode": ""
        },
        {
            "uprn": 10024087855, "address": "", "postcode": ""
        },
        {
            "uprn": 121016128, "address": "", "postcode": ""
        },
        {
            "uprn": 121016124, "address": "", "postcode": ""
        },
        {
            "uprn": 121016117, "address": "", "postcode": ""
        },
        {
            "uprn": 10024087902, "address": "", "postcode": ""
        },
        # These properties we just model with default data
        # Flat 1
        {
            "uprn": 121016113, "address": "", "postcode": ""
        },
        # Flat 10
        {
            "uprn": 121016114, "address": "", "postcode": ""
        },
        # Flat 11
        {
            "uprn": 121016115, "address": "", "postcode": ""
        },
        # Flat 12
        {
            "uprn": 121016116, "address": "", "postcode": ""
        },
        # Flat 15
        {
            "uprn": 121016118, "address": "", "postcode": ""
        },
        # Flat 16
        {
            "uprn": 121016119, "address": "", "postcode": ""
        },
        # Flat 17
        {
            "address": "Flat 17 Grove Mansions", "postcode": "SW4 9SL"
        },
        # Flat 18
        {
            "uprn": 10024087901, "address": "", "postcode": ""
        },
        # Flat 3
        {
            "uprn": 121016122, "address": "", "postcode": ""
        },
        # Flat 4
        {
            "uprn": 121016123, "address": "", "postcode": ""
        },
        # Flat 6
        {
            "uprn": 121016125, "address": "", "postcode": ""
        },
        # Flat 7
        {
            "uprn": 10024087854, "address": "", "postcode": ""
        },
        # Flat 7A
        {
            "uprn": 10024087840, "address": "", "postcode": ""
        },
        # Flat 8A
        {
            "uprn": 10024087841, "address": "", "postcode": ""
        },
    ]
    asset_list = pd.DataFrame(asset_list)

    filename = f"{8}/{portfolio_id}/asset_list.csv"
    save_csv_to_s3(
        dataframe=asset_list,
        bucket_name="retrofit-plan-inputs-dev",
        file_name=filename
    )

    # TODO Create asset list
    # TODO: Store asset list & non_intrusive_recommendations
    # Store non-invasive recommendations in S3
    non_invasive_recommendations_filename = f"{8}/{portfolio_id}/non_invasive_recommendations.json"
    save_csv_to_s3(
        dataframe=pd.DataFrame(non_intrusive_recommendations),
        bucket_name="retrofit-plan-inputs-dev",
        file_name=non_invasive_recommendations_filename
    )

    # This is the first scenario which includes the first batch of recommendations
    body1 = {
        "portfolio_id": str(portfolio_id),
        "housing_type": "Private",
        "goal": "Increasing EPC",
        "goal_value": "A",
        "trigger_file_path": filename,
        "already_installed_file_path": "",
        "patches_file_path": "",
        "non_invasive_recommendations_file_path": non_invasive_recommendations_filename,
        "inclusions": [
            "draught_proofing", "mixed_glazing", "trickle_vents", "low_energy_lighting", "windows"
        ],
        "budget": None,
        "scenario_name": "Quick wins - do now while tenanted",
        "multi_plan": True,
    }

    # This is the second scenario which includes the second batch of recommendations
    body2 = {
        "portfolio_id": str(portfolio_id),
        "housing_type": "Private",
        "goal": "Increasing EPC",
        "goal_value": "A",
        "trigger_file_path": filename,
        "already_installed_file_path": "",
        "patches_file_path": "",
        "non_invasive_recommendations_file_path": non_invasive_recommendations_filename,
        "inclusions": [
            "draught_proofing",
            "mixed_glazing",
            "trickle_vents",
            "low_energy_lighting",
            "suspended_floor_insulation",
            "internal_wall_insulation",
            "room_roof_insulation",
            "windows"
        ],
        "budget": None,
        "scenario_name": "Do when void",
        "multi_plan": True,
    }

    print(body1)
    print(body2)
