# 
# RiskScape™ Copyright New Zealand Institute for Earth Science Limited
# (Earth Sciences New Zealand) is distributed for research purposes only
# under the terms of AGPLv3.
# 
# RiskScape™ Copyright 2026 New Zealand Institute for Earth Science
# Limited (Earth Sciences New Zealand). All rights reserved. Source code
# available under the AGPLv3.
# 
# This program is free software: you can redistribute it and/or modify it under
#  the terms of the GNU Affero General Public License as published by the Free
#  Software Foundation, either version 3 of the License, or (at your option) any
#  later version.
# 
# This program is distributed for RESEARCH PURPOSES ONLY, in the hope that it will
# be useful for research and education initiatives.
# 
# If you are not a researcher, or you are a researcher who wishes to use this
# program on terms other than AGPLv3 (including those who wish to restrict the
# distribution of any source code created using this program), please contact:
# https://riskscape.org.nz
# 
# This program is distributed WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Affero General Public License for more details.  You should have received a copy
# of the GNU Affero General Public License along with this program.  If not, see
# <http://www.gnu.org/licenses/>.
# 
# By way of summary only, under the AGPLv3:
#     • Permissions of this strongest copyleft license are conditioned
#       on making available complete source code of licensed works and
#       modifications, which include larger works using a licensed work,
#       under the same license.
#     • Copyright and license notices must be preserved.
#     • Contributors provide an express grant of patent rights.
#     • When a modified version is used to provide a service over a
#       network, the complete source code of the modified version must be made
#       available.
# 


#
# Classifier function problems
#
nz.org.riskscape.defaults.classifier.ProblemCodes.PRE_NOT_STRUCT = \
  'pre' function must return a struct (was {0})

nz.org.riskscape.defaults.classifier.ProblemCodes.BODY_NOT_STRUCT = \
  body must return a struct (was {0})

nz.org.riskscape.defaults.classifier.ProblemCodes.MISSING_ID = \
  Function does not declare an id

nz.org.riskscape.defaults.classifier.ProblemCodes.EMPTY_BODY = \
  Body of function is empty. Please specify one or more 'filter' or 'function' statements

nz.org.riskscape.defaults.classifier.ProblemCodes.EMPTY_FILTER = \
  Encountered ''filter'' statement without corresponding ''function'' on line {0}.

nz.org.riskscape.defaults.classifier.ProblemCodes.MIXED_TREE_RESULT_TYPES = \
  Line {0} of your classifier function returns a struct type, but line {1} returns a \
  simple type - you can not mix these within the body of your classifier function

nz.org.riskscape.defaults.classifier.ProblemCodes.FUNCTION_AND_DEFAULT = \
  Function on line {0} will be replaced by default on line {1}

nz.org.riskscape.defaults.classifier.ProblemCodes.REDEFINITION = \
  ''{0}'' has been defined more than once. Only one is allowed.

nz.org.riskscape.defaults.classifier.ProblemCodes.RETURN_TYPE_MISMATCH = \
  The declared return-type does not match what is actually returned by the function (i.e. in the body or post section)

nz.org.riskscape.defaults.curves.ContinuousLinearFitter.LocalProblems.NO_DATA = \
  There is no aggregated data to fit a curve to. This may occur if all the aggregated X and/or Y values are null

nz.org.riskscape.defaults.curves.ContinuousLinearFitter.LocalProblems.DUPLICATE_X_VALUES = \
  The aggregated data contains duplicate X values ({1}). \
  To use the ''{0}'' fit, ensure that only unique X values are present, e.g. only use the min or max Y value where X={1}

nz.org.riskscape.defaults.curves.FitCurveFunction.LocalProblems.FITTING_FAILED = \
  Failed to fit a ''{0}'' curve to the given data:

nz.org.riskscape.defaults.curves.FitCurveFunction.LocalProblems.NOTHING_FITS = \
  'fit_curve' function failed to fit any curve against the aggregated data. \
  Try saving the pipeline data before the 'group' step that uses 'fit_curve', \
  and check that the data is a suitable "shape" for curve fitting. \
  Further pipeline steps may be required to clean up the data before fitting.

nz.org.riskscape.defaults.curves.TrapezoidIntegrationFunction.LocalProblems.FUNCTION_BAD_ARGUMENT_TYPES = \
  Function should accept a single floating argument, but it requires {0}

nz.org.riskscape.defaults.curves.TrapezoidIntegrationFunction.LocalProblems.FUNCTION_BAD_RETURN_TYPE = \
  Function should return floating, but found {0}

nz.org.riskscape.defaults.function.BucketFunction.LocalProblems.BUCKETS_TYPE_HINT = \
  The `buckets` argument must be a struct (e.g. `{'High': 100, 'Low': 10}`), a list (e.g. `['High', 'Low']`), or a \
  `set` or `enumeration` type expression that can be converted in to a list (e.g. 'use_category' or \
  'set(text, \\'High\\', \\'Low\\')'.  List elements must not be of mixed types and must be text or numbers.

nz.org.riskscape.defaults.function.BucketFunction.LocalProblems.DUPLICATE_BUCKET_VALUE = \
  The buckets expression contains the value ''{0}'' multiple times. Ensure the value only occurs once.

nz.org.riskscape.defaults.function.CallFunction.LocalProblems.FUNCTION_DOES_NOT_REALIZE = \
  Function ''{0}'' is not suitable for this model pipeline. Check that it accepts the correct number \
  of arguments, and that the input data has the attributes that the function expects. \
  Using a bookmark may help to transform attributes in the input data into what the function accepts

# Note arg {1} is a model provided message so needs some text to ensure users know it is from the model
# as it could contain content we won't want users to think is riskscape generated.
nz.org.riskscape.defaults.function.CallFunction.LocalProblems.FUNCTION_DOES_NOT_REALIZE_WITH_MESSAGE = \
  Function ''{0}'' is not suitable for this model pipeline. Model provided message: {1}

nz.org.riskscape.defaults.function.ListToColumns.LocalProblems.INSUFFICIENT_LIST_ITEMS_ENCOUNTERED = \
  {0} list items are required but only {1} were found.

nz.org.riskscape.defaults.interp.CreateContinuousFunction.LocalProblems.COULD_NOT_CREATE_CONTINUOUS_FUNCTION_FROM_Y_VALUE = \
  Could not create a continuous function from the expression ''{0}'' - its result type ''{1}'' is not suitable for \
  interpolation.  Interpolation is only possible with values that support maths operations, such as numbers and \
  structs of numbers.

nz.org.riskscape.defaults.interp.ToContinuousCurve.LocalProblems.BAD_Y_VALUE  = \
  The given `y-value` expression is not suitable for interpolation.  Make sure it returns a numeric value, or a struct \
  containing only numeric values.

nz.org.riskscape.defaults.interp.ToContinuousCurve.LocalProblems.DUPLICATE_X_VALUE = \
  X values must be unique but {0} has been encountered more than once.

nz.org.riskscape.defaults.interp.ToContinuousCurve.LocalProblems.EMPTY = \
  Could not build curve because no valid data-points were found in the {0} row(s) of data. \
  Please check that the source data is not empty, and the `x-value` and `y-value` expressions \
  yield non-null results (null values are ignored).

nz.org.riskscape.defaults.function.AALHazardBasedFunction.LocalProblems.DUPLICATE_PROBABILITY = \
  The exceedance-probability should be a unique value but ''{0}'' has been repeated multiple times in the input data. \
  This may indicate that the pipeline is not aggregating the loss data by event (via a group step) before aal_trapz() is called

nz.org.riskscape.defaults.function.AALHazardBasedFunction.LocalProblems.TOO_FEW_EVENTS = \
  Too few events ({0}) were provided to calculate an AAL - {1} or more events are needed. \
  Note that your pipeline should not filter out zero losses before this step, \
  as this will remove useful data-points for calculating the AAL

nz.org.riskscape.defaults.function.csv.CsvFunctionProblems.MEMBER_DOES_NOT_EXIST = \
  The attribute ''{0}'' does not exist amongst {1}.

nz.org.riskscape.defaults.function.csv.CsvFunctionProblems.NO_RETURN_COLUMNS_FOUND = \
  No suitable 'return-columns' have been found in CSV file, which contains data: {0}.

nz.org.riskscape.defaults.function.csv.CsvFunctionProblems.DUPLICATE_HAZARD_VALUE = \
  The ''{0}'' CSV column must contain unique values, but {1} has been encountered more than once.

nz.org.riskscape.defaults.function.csv.CsvFunctionProblems.EMPTY_CSV = \
  The CSV does not contain any valid data. Please check that the source data is not empty.

nz.org.riskscape.defaults.function.csv.CsvFunctionProblems.EXPOSURE_DEFAULT_VALUE_REQUIRED_WHEN_EXPOSURE_ATTRIBUTE_SET = \
  `default-exposure-value` is required when `exposure-attribute` is set.

nz.org.riskscape.defaults.function.csv.CsvFunctionProblems.DEFAULT_EXPOSURE_VALUE_NOT_FOUND_IN_RETURN_COLUMNS = \
  The `default-exposure-value` (''{0}'') does not exist amongst the `return-columns` ({1}).

nz.org.riskscape.defaults.function.expression.ExpressionFunctionFramework.LocalProblems.ARG_COUNT_MISMATCH = \
  The lambda expression in the function source has {1} arguments, \
  but the `argument-types` in the INI definition has {0} types. \
  Both need to have the same number of arguments. \
  Try removing the `argument-types` from the INI file and RiskScape will "infer" the argument types for you

nz.org.riskscape.defaults.function.expression.ExpressionFunctionFramework.LocalProblems.RETURN_TYPE_COERCION_FAILED = \
  Could not convert value `{0}` from `{1}` to function''s declared return-type `{2}`.

nz.org.riskscape.defaults.function.LazyLookupTable.LocalProblems.MAPPING_FUNCTION_CANNOT_RETURN_NULLABLE = \
  The `mapping-function` cannot return a nullable type but found: {0}.  \
  Try wrapping the expression with if_null and provide a default value, e.g. `key -> if_null(expr(key), <default-value>)`

nz.org.riskscape.engine.defaults.function.LookupBookmark.LocalProblems.BAD_PLACEHOLDER_HINT = \
  The simplest way to load data from filepath(s) that vary dynamically is to use an \
  expression like `bookmark('ID', { location: FILE_THAT_VARIES })`, where `ID` refers to a valid "placeholder" bookmark. \
  In this case, the placeholder bookmark is not valid.

nz.org.riskscape.engine.defaults.function.LookupBookmark.LocalProblems.TYPE_REQUIRED_HINT = \
  The bookmark type cannot be determined because the arguments are not constant values, e.g. `bookmark('buildings')` uses a constant \
  `id` argument, whereas `bookmark(location)` does not. A simple way to load bookmark data dynamically is to use an \
  expression like `bookmark('ID', { location: FILE_THAT_VARIES })`, where `ID` refers to a valid bookmark. \
  Alternatively, for raster data, you could supply a 3rd `type: 'coverage(floating)'` argument.

nz.org.riskscape.engine.defaults.function.LookupBookmark.LocalProblems.OPTION_VALUE_MUST_BE_TEXT_NUMERIC_OR_BOOLEAN = \
  Option values must be text, numeric or boolean. But option ''{0}'' is {1}

nz.org.riskscape.defaults.function.ToLookupTable.LocalProblems.KEY_NOT_UNIQUE = \
  Key ''{0}'' is not unique - has multiple values: ''{1}''

nz.org.riskscape.defaults.function.SegmentByGrid.LocalProblems.COVERAGE_HAS_NO_ENVELOPE = \
  The supplied coverage ''{0}'' does not have a spatial extent to find the origin from.

nz.org.riskscape.engine.defaults.tree.TreeTextParser.Node.tabs_and_spaces = \
  Both tabs and spaces are being used. Mixed indenting may cause unexpected behaviour, please choose either tabs or \
  spaces.

nz.org.riskscape.engine.function.geometry.NormalizeGeometry.LocalProblems.NON_GEOMETRY_ATTRIBUTE_EXISTS = \
  Cannot use ''{0}'' as the geometry attribute name because this will replace an existing attribute with type {1}.

nz.org.riskscape.engine.function.geometry.NormalizeGeometry.LocalProblems.GEOMETRIES_NOT_EQUAL = \
  Cannot normalize geometry because multiple geometries are present (in ''{0}'' and ''{2}'' attributes). \
  Remove one of these attributes and try again.

nz.org.riskscape.engine.function.geometry.NormalizeGeometry.LocalProblems.NO_GEOMETRY = \
  The given data contains no geometry attribute. Check you are using geospatial input data here

nz.org.riskscape.engine.function.geometry.RelationToTypedCoverage.LocalProblems.COULD_NOT_BUILD_INDEX = \
  Could not construct a coverage from ''{0}''

nz.org.riskscape.defaults.classifier.ClassifierFunctionFramework.LocalProblems.NOT_SUPPORTED = \
  Defining classifier functions in an INI section is not supported currently. \
  Instead, you should define them like: \n\
  [project]\n\
  functions = file-containing-your-function.txt

nz.org.riskscape.defaults.function.SwitchFunction.LocalProblems.CASE_OPTIONS_MUST_BE_SAME_TYPE_AS_ON = \
  Cases must contain the same type of values as the on argument({0}) but {1} was found

nz.org.riskscape.defaults.function.SwitchFunction.LocalProblems.CASE_MUST_RETURN_SAME_TYPE_AS_DEFAULT = \
  Cases must return the same type as the default({0}) but {1} was found

nz.org.riskscape.engine.output.QGSWriter.LocalProblems.ERROR_WRITING_FILE = \
  Problems encountered saving the 'project.qgs' file for QGIS. \
  Normally this file helps you load model results into QGIS quickly, however, it was not saved correctly in this case

#
# MosaicCoverageResolver
#
nz.org.riskscape.engine.defaults.data.MosaicCoverageResolver.LocalProblems.BOUNDS_REQUIRED = \
  Coverage ''{0}'' is missing bounds metadata.  All coverages in a mosaic must report a bounds. \
  Try using another format, such as a GeoTIFF.

nz.org.riskscape.engine.defaults.data.MosaicCoverageResolver.LocalProblems.CRS_MISMATCH = \
  Coverage ''{0}'' is in CRS ''{2}'', whereas the preceeding coverages are in ''{1}''.  All coverages within a  mosaic \
  must be in the same CRS.  Try reprojecting the file first.

nz.org.riskscape.engine.defaults.data.MosaicCoverageResolver.LocalProblems.EMPTY_MOSAIC = \
  The mosaic file at ''{0}'' was empty.  The coverage has been created, but will always return no-data.

#
# BaseJdbcOutputStore Problems
#
nz.org.riskscape.engine.defaults.data.jdbc.BaseJdbcOutputStore.LocalProblems.FAILED_WHEN = \
  Failed to {0} {1}

nz.org.riskscape.engine.defaults.data.jdbc.BaseJdbcOutputStore.LocalProblems.CANNOT_APPEND_TABLE_STRUCTURE_MISMATCH = \
  Cannot append to table ''{0}'', expected schema ''{1}'' but found ''{2}''

nz.org.riskscape.engine.defaults.data.jdbc.BaseJdbcOutputStore.LocalProblems.CANNOT_APPEND_TABLE_HINT = \
  Either drop the table or update it to the expected schema and try again.

#
# WfsBookmarkResolver
#
nz.org.riskscape.engine.defaults.data.WfsBookmarkResolver.LocalProblems.BAD_WFS_TARGET = \
  Could not access ''{0}'' WFS data. Please check that the URL is a valid link to a WFS service. \
  In some cases an access token or API key may be required in order to access a WFS service

