'use strict';
const callsites = require('callsites');

module.exports = filepath => {
    const stacks = callsites();

    if (!filepath) {
        return stacks[2].getFileName();
    }

    let seenVal = false;

    // Skip the first stack as it's this function
    stacks.shift();

    for (const stack of stacks) {
        const parentFilepath = stack.getFileName();

        if (typeof parentFilepath !== 'string') {
            continue;
        }

        if (parentFilepath === filepath) {
            seenVal = true;
            continue;
        }

        // Skip native modules
        if (parentFilepath === 'module.js') {
            continue;
        }

        if (seenVal && parentFilepath !== filepath) {
            return parentFilepath;
        }
    }
};