# coding=utf-8

"""Definitions relating to exposure classifications."""

from safe.utilities.i18n import tr

__copyright__ = "Copyright 2016, The InaSAFE Project"
__license__ = "GPL version 3"
__email__ = "info@inasafe.org"
__revision__ = '$Format:%H$'

exposure_classification_type = tr('Exposure Classification'),

# We should include this somewhere in definitions:
# tr(
#     'An exposure classification is used to group exposure features '
#     'that have similar properties. For example a house and an apartment '
#     'building might be grouped into an exposure class called '
#     '"residential". Making groups in this way will make the reports '
#     'generated by InaSAFE easier to read and less verbose.'
# )

# Each classification should have an "other" group at the end of the
# classification. Each features without a classification will go in the last
# item of the list.

# Note from Etienne 25/10/16
# The osm_downloader is not used in InaSAFE itself. It is used in OSM-Reporter
# to generate the value_mapping. Please do not remove it.
# See https://github.com/kartoza/osm-reporter/wiki how to use this key.

generic_structure_classes = {
    'key': 'generic_structure_classes',
    'name': tr('Generic Structure Classification'),
    'description': tr(
        'Classification of structure based on OSM.'
    ),
    'type': exposure_classification_type,
    'citations': [
        {
            'text': None,
            'link': None
        }
    ],
    'classes': [
        {
            'key': 'residential',
            'name': tr('Residential'),
            'description': tr(
                'A structure used to provide shelter for people.'),
            'string_defaults': [
                'dorm',
                'house',
                'residence',
                'residential',
                'apartments',
            ],
            'osm_downloader': ['Residential'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'education',
            'name': tr('Education'),
            'description': tr(
                'A structure that provides a service in the education '
                'sector.'),
            'string_defaults': [
                'college',
                'education',
                'kindergarten',
                'school',
                'university',
                'university/college',
            ],
            'osm_downloader': ['School', 'University/College'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'health',
            'name': tr('Health'),
            'description': tr(
                'A structure that provides a service or facility in the '
                'health sector.'),
            'string_defaults': [
                'clinic',
                'clinic/doctor',
                'dentist',
                'doctor',
                'doctors',
                'health',
                'hospital',
                'pharmacy',
            ],
            'osm_downloader': ['Clinic/Doctor', 'Hospital'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'transport',
            'name': tr('Transport'),
            'description': tr(
                'A structure that provides a service or facility in the '
                'transport sector.'),
            'string_defaults': [
                'aerodrome',
                'airport',
                'bus station',
                'bus stop',
                'ferry terminal',
                'station',
                'terminal',
                'transportation',
            ],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'place of worship',
            'name': tr('Place of Worship'),
            'description': tr(
                'A structure or facility that is used for prayer or related '
                'religion activity.'),
            'string_defaults': [
                'place of worship - buddhist',
                'place of worship - christian',
                'place of worship - hindu',
                'place of worship - islam',
                'place of worship',
                'church',
                'mosque',
                'temple',
                'synagogue',
                'worship',
            ],
            'osm_downloader': [
                'Place of Worship - Islam', 'Place of Worship - Unitarian',
                'Place of Worship - Buddhist', 'Place of Worship'
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'government',
            'name': tr('Government'),
            'description': tr(
                'A structure or facility that is used to provide a public '
                'service or other government activity.'),
            'string_defaults': ['government'],
            'osm_downloader': ['Government'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'commercial',
            'name': tr('Commercial'),
            'description': tr(
                'A structure or facility that is used for commercial or '
                'industrial purposes.'),
            'string_defaults': [
                'accommodation',
                'atm',
                'bank',
                'cafe',
                'clothes',
                'commercial',
                'convenience',
                'economy',
                'fast food',
                'hotel',
                'industrial',
                'mall',
                'market',
                'restaurant',
                'seafood',
                'shoes',
                'shop',
                'supermarket',
                'tailor',
                'warehouse',
                'works',
            ],
            'osm_downloader': [
                'Commercial',
                'Industrial',
                'Supermarket'
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'recreation',
            'name': tr('Recreation'),
            'description': tr(
                'A structure or facility that is used for entertainment, '
                'sporting or recreation purposes.'),
            'string_defaults': [
                'amusement arcade',
                'cinema',
                'museum',
                'pitch',
                'recreation and entertainment',
                'sport centre',
                'sport',
                'sports facility',
                'stadium',
                'theatre',
                'zoo',
            ],
            'osm_downloader': ['Sports Facility'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'public facility',
            'name': tr('Public Facility'),
            'description': tr(
                'A structure or facility that provides a service or facility '
                'to the public including emergency services.'),
            'string_defaults': [
                'convention hall',
                'fire station',
                'library',
                'police station',
                'prison',
                'public building',
                'public facility',
                'toilet',
                'public',
            ],
            'osm_downloader': [
                'Fire Station',
                'Police Station',
                'Public Building',
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            # IF YOU UPDATE THIS ONE, PLEASE UPDATE THE OTHER ONE TOO
            'key': 'evacuation centre',
            'name': tr('Evacuation Centre'),
            'description': tr(
                'Evacuation centres provide a place of temporary refuge for '
                'people evacuated from homes in the vicinity of a disaster '
                'and for people who may be travelling through the affected '
                'area but are unable to continue.'),
            'string_defaults': [
                'evacuation centre',
                'evacuation center',
                'refuge',
                'idp camp'
            ],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'other',
            'name': tr('Other'),
            'description': tr(
                'Any other structure frequently mapped.'),
            'string_defaults': [
                'animal boarding',
                'garage',
                'lighthouse',
                'other',
                'utility',
                'water well',
                'construction',
                'yes',
            ],
            'osm_downloader': ['Utility'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        }
    ]
}

generic_road_classes = {
    'key': 'generic_road_classes',
    'name': tr('Generic Road Classification'),
    'description': tr(
        'Classification of roads based on OSM.'
    ),
    'type': exposure_classification_type,
    'citations': [
        {
            'text': None,
            'link': None
        }
    ],
    'classes': [
        {
            'key': 'motorway',
            'name': tr('Motorway'),
            'description': tr(
                'A road designed for fast moving traffic often with multiple '
                'lanes for each direction of traffic.'),
            'osm_downloader': [
                'Motorway link',
                'Motorway or highway',
            ],
            'string_defaults': [
                'motorway link',
                'motorway',
                'trunk link',
                'trunk',
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'primary',
            'name': tr('Primary'),
            'description': tr(
                'A road that provides the main transportation link, often '
                'over a long distance travel characteristic and supporting a '
                'high average velocity.'),
            'string_defaults': [
                'primary link',
                'primary road',
                'primary',
            ],
            'osm_downloader': [
                'Primary link',
                'Primary road',
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'secondary',
            'name': tr('Secondary'),
            'description': tr(
                'A road that provides a transportation link for medium '
                'distance travel and medium average velocity.'),
            'string_defaults': [
                'secondary link',
                'secondary',
            ],
            'osm_downloader': [
                'Secondary link',
                'Secondary',
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'local',
            'name': tr('Local'),
            'description': tr(
                'A road that provides a transportation link for a short '
                'distance travel and low average velocity.'),
            'string_defaults': [
                'local',
                'tertiary link',
                'tertiary',
                'tertiary',
                'unclassified',
            ],
            'osm_downloader': [
                'Tertiary link',
                'Tertiary',
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'path',
            'name': tr('Path'),
            'description': tr(
                'A route for pedestrian and non-motorised transport.'),
            'osm_downloader': [
                'Cycleway, footpath, etc.',
                'Track',
            ],
            'string_defaults': [
                'cycleway',
                'pedestrian',
                'footway',
                'path',
                'track',
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'other',
            'name': tr('Other'),
            'description': tr(
                'A road that services residential or local traffic '
                'with low average velocity.'),
            'string_defaults': [
                'living street',
                'other',
                'residential',
                'road',
                'service',
            ],
            'osm_downloader': [
                'Road, residential, living street, etc.'
            ],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        }
    ]
}

generic_place_classes = {
    'key': 'generic_place_classes',
    'name': tr('Generic Place Classification'),
    'description': tr(
        'Classification of place based on OSM.'
    ),
    'type': exposure_classification_type,
    'citations': [
        {
            'text': None,
            'link': None
        }
    ],
    'classes': [
        {
            'key': 'city',
            'name': tr('City'),
            'description': tr(
                'The largest urban settlements in the territory, normally '
                'including the national, state and provincial capitals.'),
            'osm_downloader': [],
            'string_defaults': ['city'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'Town',
            'name': tr('Town'),
            'description': tr(
                'A second tier urban settlement of local importance, often '
                'with a population of at least 10,000 people and good range '
                'of local facilities including schools, medical facilities '
                'etc. and traditionally a market.'),
            'string_defaults': ['town'],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'Village',
            'name': tr('Village'),
            'description': tr(
                'A smaller distinct settlement, smaller than a town with few '
                'facilities available. People will typically travel to nearby '
                'towns to access facilities.'),
            'string_defaults': ['village'],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'hamlet',
            'name': tr('Hamlet'),
            'description': tr(
                'A smaller rural community typically with fewer than 100-200 '
                'inhabitants and minimal infrastructure.'),
            'string_defaults': ['hamlet'],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            # IF YOU UPDATE THIS ONE, PLEASE UPDATE THE OTHER ONE TOO
            'key': 'evacuation centre',
            'name': tr('Evacuation Centre'),
            'description': tr(
                'Evacuation centres provide a place of temporary refuge for '
                'people evacuated from homes in the vicinity of a disaster '
                'and for people who may be travelling through the affected '
                'area but are unable to continue.'),
            'string_defaults': [
                'evacuation centre',
                'evacuation center',
                'refuge',
                'idp camp'
            ],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'airport',
            'name': tr('Airport'),
            'description': tr(
                'A complex of runways and buildings for the takeoff, landing, '
                'and maintenance of civil aircraft, with facilities for '
                'passengers.'),
            'osm_downloader': [],
            'string_defaults': ['airport'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'other',
            'name': tr('Other'),
            'description': tr('Other'),
            'osm_downloader': [],
            'string_defaults': ['other'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        }
    ]
}

generic_landcover_classes = {
    'key': 'generic_landcover_classes',
    'name': tr('Generic Landcover Classification'),
    'description': tr(
        'Classification of landcover based on OSM.'
    ),
    'type': exposure_classification_type,
    'citations': [
        {
            'text': None,
            'link': None
        }
    ],
    'classes': [
        {
            'key': 'residential',
            'name': tr('Residential'),
            'description': tr(
                'Predominantly houses or apartment buildings.'),
            'osm_downloader': [],
            'string_defaults': ['residential', 'population'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'industrial',
            'name': tr('Industrial'),
            'description': tr(
                'Predominantly workshops, factories or warehouses.'),
            'string_defaults': ['industrial'],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'retail',
            'name': tr('Retail'),
            'description': tr(
                'Predominantly shops.'),
            'string_defaults': ['retail'],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'wood',
            'name': tr('Wood'),
            'description': tr(
                'A forested area.'),
            'string_defaults': ['wood', 'forest'],
            'osm_downloader': [],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'farm',
            'name': tr('Farm'),
            'description': tr(
                'An area of farmland used for tillage and pasture (animals, '
                'vegetables, flowers, fruit growing).'),
            'osm_downloader': [],
            'string_defaults': ['farm', 'meadow'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'water',
            'name': tr('Water'),
            'description': tr(
                'Water bodies both natural and man-made.'),
            'osm_downloader': [],
            'string_defaults': ['water', 'lake'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'other',
            'name': tr('Other'),
            'description': tr(
                'Any other land use type.'),
            'osm_downloader': [],
            'string_defaults': ['other'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        }
    ]
}

badan_geologi_landcover_classes = {
    'key': 'badan_geologi_landcover_classes',
    'name': tr('Badan Geologi Landcover Classification'),
    'description': tr(
        'Classification of landcover based on Badan Geologi'),
    'type': exposure_classification_type,
    'citations': [
        {
            'text': tr('Badan Geologi'),
            'link': 'https://github.com/inasafe/inasafe/issues/3947'
        }
    ],
    'classes': [
        {
            'key': 'settlement',
            'name': tr('Settlement'),
            'description': tr('Settlement'),
            'osm_downloader': [],
            'string_defaults': ['Permukiman dan Tempat Kegiatan', '50102'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'rice_field',
            'name': tr('Rice Field'),
            'description': tr('Rice Field'),
            'osm_downloader': [],
            'string_defaults': ['Sawah', '50306'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'plantation',
            'name': tr('Plantation'),
            'description': tr('Plantation'),
            'osm_downloader': [],
            'string_defaults': ['Perkebunan / Kebun', '50304'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'water_supply',
            'name': tr('Water'),
            'description': tr('Water bodies'),
            'osm_downloader': [],
            'string_defaults': [
                'Air Danau / Situ',
                'Air Empang',
                'Air Penggaraman',
                'Air Tambak',
                'Air Tawar Sungai',
                'Air Waduk',
                'Perairan Lainnya',
                '50404',
                '50420',
                '50418',
                '50416',
                '50408',
                '50406',
                '50400'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'forest',
            'name': tr('Forest'),
            'description': tr('Forest'),
            'osm_downloader': [],
            'string_defaults': ['Hutan Rimba', '50202'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        },
        {
            'key': 'other',
            'name': tr('Other'),
            'description': tr(
                'Any other land use type.'),
            'osm_downloader': [],
            'string_defaults': ['other'],
            'citations': [
                {
                    'text': None,
                    'link': None
                }
            ]
        }
    ]
}


data_driven_classes = {
    'key': 'data_driven_classes',
    'name': tr('Generic Data-driven Classification'),
    'description': tr(
        'Classification based on the content of the exposure dataset.'
    ),
    'type': exposure_classification_type,
    'citations': [
        {
            'text': None,
            'link': None
        }
    ],
    'classes': []
}

exposure_classifications = [
    generic_structure_classes,
    generic_road_classes,
    generic_place_classes,
    generic_landcover_classes,
    badan_geologi_landcover_classes,
    data_driven_classes
]
