import castSlice from "./_castSlice";
import hasUnicode from "./_hasUnicode";
import stringToArray from "./_stringToArray";

/**
 * Creates a function like `lowerFirst`.
 *
 * @private
 * @param {string} methodName The name of the `String` case method to use.
 * @returns {Function} Returns the new case function.
 */
function createCaseFirst(methodName: "toLowerCase" | "toUpperCase"): (string: string) => string {
    return (string: string) => {
        if (!string) {
            return "";
        }
        const strSymbols = hasUnicode(string) ? stringToArray(string) : undefined;
        const chr = strSymbols ? strSymbols[0] : string[0];
        const trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
        return chr[methodName]() + trailing;
    };
}

export default createCaseFirst;
// import castSlice from "./castSlice.js";
// import hasUnicode from "./hasUnicode.js";
// import stringToArray from "./stringToArray.js";

// /**
//  * Creates a function like `lowerFirst`.
//  *
//  * @private
//  * @param {string} methodName The name of the `String` case method to use.
//  * @returns {Function} Returns the new case function.
//  */
// function createCaseFirst(methodName) {
//     return string => {
//         if (!string) {
//             return "";
//         }

//         const strSymbols = hasUnicode(string) ? stringToArray(string) : undefined;

//         const chr = strSymbols ? strSymbols[0] : string[0];

//         const trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);

//         return chr[methodName]() + trailing;
//     };
// }

// export default createCaseFirst;
