// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "../../include/javascript/resource.h"

CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id)
{
    switch (id)
    {
    case IDS_STRING_JSALERT:
        return L"Alert";
    case IDS_STRING_JSPARAMERROR:
        return L"Incorrect number of parameters passed to function.";
    case IDS_STRING_JSAFNUMBER_KEYSTROKE:
        return L"The input value is invalid.";
    case IDS_STRING_JSPARAM_TOOLONG:
        return L"The input value is too long.";
    case IDS_STRING_JSPARSEDATE:
        return L"The input value can't be parsed as a valid date/time (%s).";
    case IDS_STRING_JSRANGE1:
        return L"The input value must be greater than or equal to %s"
               L" and less than or equal to %s.";
    case IDS_STRING_JSRANGE2:
        return L"The input value must be greater than or equal to %s.";
    case IDS_STRING_JSRANGE3:
        return L"The input value must be less than or equal to %s.";
    case IDS_STRING_NOTSUPPORT:
        return L"Operation not supported.";
    case IDS_STRING_JSBUSY:
        return L"System is busy.";
    case IDS_STRING_JSEVENT:
        return L"Duplicate formfield event found.";
    case IDS_STRING_RUN:
        return L"Script ran successfully.";
    case IDS_STRING_JSPRINT1:
        return L"The second parameter can't be converted to a Date.";
    case IDS_STRING_JSPRINT2:
        return L"The second parameter is an invalid Date!";
    case IDS_STRING_JSNOGLOBAL:
        return L"Global value not found.";
    case IDS_STRING_JSREADONLY:
        return L"Cannot assign to readonly property.";
    default:
        return L"";
    }
}

CFX_WideString JSFormatErrorString(const char* class_name,
                                   const char* property_name,
                                   const CFX_WideString& details) {
    CFX_WideString result = CFX_WideString::FromLocal(class_name);
    if (property_name) {
        result += L".";
        result += CFX_WideString::FromLocal(property_name);
    }
    result += L": ";
    result += details;
    return result;
}
