#include "script_component.hpp"
/*
 * Author: Dedmen
 * Text statement for the scope Night vision support stat.
 *
 * Arguments:
 * 0: not used
 * 1: item config path (CONFIG)
 *
 * Return Value:
 * String to display
 *
 * Public: No
 */

params ["", "_config"];
TRACE_1("statTextStatement_scopeVisionMode",_config);

private _opticsModes = ("true" configClasses (_config >> "ItemInfo" >> "OpticsModes")) apply {
    private _visionMode = getArray (_x >> "visionMode");
    [
        getNumber (_x >> "useModelOptics") == 1, //is in optics
        _visionMode isEqualTo [], //optional NVG 
        "NVG" in _visionMode, //Integrated NVG
        "Ti" in _visionMode //Integrated Thermal
    ]
};

private _primaryNVGIntegrated = false;
private _primaryNVGSupported = false;
private _primaryTiIntegrated = false;
private _secondaryNVGSupported = false;

{
    _x params ["_isPrimary", "_optionalNvg", "_integratedNVG", "_integratedTi"];
    if (_isPrimary) then {
        if (_integratedNVG) then {
            _primaryNVGIntegrated = true;
        };
        if (_optionalNvg) then {
            _primaryNVGSupported = true;
        };
        if (_integratedTi) then {
            _primaryTiIntegrated = true;
        };
    } else {
        if (_optionalNvg) then {
            _secondaryNVGSupported = true;
        }
    }
} forEach _opticsModes;

//Detecting Primary by useModelOptics works in 99.9% of cases.
//But on some scopes (from one specific mod) even the primary mode has useModelOptics=false
//So we have this workaround

if (
    count _opticsModes == 1 || //If we only have a single mode. And it's a secondary, then consider it primary.
    {{_x select 1} count _opticsModes  == count _opticsModes} //If every mode supports it. Then then the primary also supports it
) then {
    _primaryNVGSupported = _secondaryNVGSupported;
};

if (_primaryNVGIntegrated) exitWith {LLSTRING(statVisionMode_IntPrim)};
if (_primaryNVGSupported) exitWith {LLSTRING(statVisionMode_supPrim)};
if (_secondaryNVGSupported) exitWith {LLSTRING(statVisionMode_supSec)};

LLSTRING(statVisionMode_NoSup)