File size: 2,736 Bytes
66e3a81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
 * User Session Store
 * Simple in-memory storage for user settings (active preset, etc).
 * In a real app, this should be a database (Postgres, MongoDB).
 */

const userSessions = {};
const { stylePresets } = require('../../prompts/stylePresets');

// Default preset (usually the first one)
const DEFAULT_PRESET_NAME = stylePresets[0].preset_name;

/**
 * Returns the user session or initializes it with default values.
 * @param {number|string} userId 
 */
function getUserSession(userId) {
    if (!userSessions[userId]) {
        userSessions[userId] = {
            currentPreset: DEFAULT_PRESET_NAME,
            creativity: 0.7,
            tags: "#fblifestyle #kindnessmatters #kindness",
            lastPrompt: null,
            lastStory: null,
            lastImage: null,
            awaitingEdit: false,
            awaitingImageEdit: false
        };
    }
    return userSessions[userId];
}

/**
 * Updates various user settings in the session.
 */
function updateUserSession(userId, data) {
    const session = getUserSession(userId);

    // Update Preset if provided
    if (data.presetName) {
        const preset = stylePresets.find(p => p.preset_name === data.presetName);
        if (preset) {
            session.currentPreset = data.presetName;
        }
    }

    // Update Creativity if provided
    if (data.creativity !== undefined) {
        session.creativity = parseFloat(data.creativity);
    }

    // Update Tags if provided
    if (data.tags !== undefined) {
        session.tags = data.tags;
    }

    return true;
}

/**
 * Saves the last generation context for editing.
 */
function updateLastGeneration(userId, prompt, story) {
    const session = getUserSession(userId);
    session.lastPrompt = prompt;
    session.lastStory = story;
    return true;
}

/**
 * Saves the last generated image.
 */
function updateLastImage(userId, imageBase64) {
    const session = getUserSession(userId);
    session.lastImage = imageBase64;
    return true;
}

/**
 * Sets the "awaiting edit message" state.
 */
function setAwaitingEdit(userId, value) {
    const session = getUserSession(userId);
    session.awaitingEdit = !!value;
}

function setAwaitingImageEdit(userId, value) {
    const session = getUserSession(userId);
    session.awaitingImageEdit = !!value;
}

/**
 * Returns the full preset object for the user's current choice.
 */
function getCurrentPreset(userId) {
    const session = getUserSession(userId);
    return stylePresets.find(p => p.preset_name === session.currentPreset) || stylePresets[0];
}

module.exports = {
    getUserSession,
    updateUserSession,
    getCurrentPreset,
    updateLastGeneration,
    updateLastImage,
    setAwaitingEdit,
    setAwaitingImageEdit
};