{
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -1328,
        1504
      ],
      "id": "9cd73305-1a5f-4422-aeae-8e29910d653b",
      "name": "Heartbeat (15 min)"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT \n    u.telegram_id,\n    u.first_name,\n    u.timezone,\n    u.gender,\n    u.azkar_enabled,\n    u.period_mode_active,\n    u.last_feedback_message,\n    u.sunnah_enabled,\n    u.masjid_prayer_enabled,\n    u.consecutive_perfect_days,\n    u.best_streak,\n    u.created_at,\n    p.fajr, p.sunrise, p.dhuhr, p.asr, p.maghrib, p.isha,\n    p.fajr_notified, p.dhuhr_notified, p.asr_notified, p.maghrib_notified, p.isha_notified,\n    p.fajr_roasted, p.dhuhr_roasted, p.asr_roasted, p.maghrib_roasted, p.isha_roasted,\n    p.azkar_sabah_sent, p.azkar_masa_sent,\n    p.feedback_sent,\n    dp.\"Fajr\" AS fajr_prayed,\n    dp.\"Dhuhr\" AS dhuhr_prayed,\n    dp.\"Asr\" AS asr_prayed,\n    dp.\"Maghrib\" AS maghrib_prayed,\n    dp.\"Isha\" AS isha_prayed,\n    (NOW() AT TIME ZONE u.timezone)::time AS local_time,\n    (NOW() AT TIME ZONE u.timezone)::date AS local_date,\n    EXTRACT(DOW FROM NOW() AT TIME ZONE u.timezone) AS day_of_week\nFROM users u\nJOIN prayer_times_cache p \n    ON u.telegram_id = p.user_id \n    AND p.date = (NOW() AT TIME ZONE u.timezone)::date\nLEFT JOIN daily_prayers dp \n    ON u.telegram_id = dp.user_id \n    AND dp.date = (NOW() AT TIME ZONE u.timezone)::date\nWHERE u.is_onboarded = TRUE\n  AND u.is_paused = FALSE",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        -1120,
        1504
      ],
      "id": "dd8ece04-ac12-43f2-a622-b8b59e365a5b",
      "name": "Get Users + Cache",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "const user = $input.first().json;\n\n// Helper: Parse time string to minutes since midnight\nconst timeToMinutes = (timeStr) => {\n    if (!timeStr) return null;\n    const [h, m] = timeStr.split(':').map(Number);\n    return h * 60 + m;\n};\n\n// Helper: Parse local_time to minutes\nconst localTimeToMinutes = (timeStr) => {\n    const [h, m] = timeStr.split(':').map(Number);\n    return h * 60 + m;\n};\n\nconst localMinutes = localTimeToMinutes(user.local_time);\nconst dayOfWeek = parseInt(user.day_of_week); // 0 = Sunday, 5 = Friday\nconst isFriday = dayOfWeek === 5;\nconst gender = user.gender; // 'male', 'female', or null\nconst isPeriodMode = user.period_mode_active === true;\nconst actions = [];\n\n// === FIRST DAY CHECK ===\nlet localDateStr;\nif (typeof user.local_date === 'string') {\n    localDateStr = user.local_date.split('T')[0];\n} else {\n    localDateStr = new Date(user.local_date).toISOString().split('T')[0];\n}\n\nconst createdAt = new Date(user.created_at);\nconst createdDateInUserTz = createdAt.toLocaleDateString('en-CA', { \n    timeZone: user.timezone || 'Africa/Cairo' \n});\n\nconst isFirstDay = localDateStr === createdDateInUserTz;\n\n// Skip prayer notifications/roasts on first day or period mode\nconst skipPrayerActions = isPeriodMode || isFirstDay;\n\n// Gender-specific notification messages\nconst notifyMessages = {\n    male: {\n        'Fajr': [\n            '\ud83c\udf05 \u0635\u0644\u064a\u062a \u0627\u0644\u0641\u062c\u0631\u061f',\n            '\ud83c\udf05 \u0633\u062c\u0651\u0644 \u0635\u0644\u0627\u0629 \u0627\u0644\u0641\u062c\u0631',\n            '\ud83c\udf05 \u0627\u0644\u0641\u062c\u0631 - \u0635\u0644\u064a\u062a\u061f',\n            '\ud83c\udf05 \u0645\u062a\u0646\u0633\u0627\u0634 \u062a\u0633\u062c\u0644 \u0627\u0644\u0641\u062c\u0631',\n            '\ud83c\udf05 \u0635\u0644\u0627\u0629 \u0627\u0644\u0641\u062c\u0631 '\n        ],\n        'Dhuhr': [\n            '\u2600\ufe0f \u0635\u0644\u064a\u062a \u0627\u0644\u0638\u0647\u0631\u061f',\n            '\u2600\ufe0f \u0633\u062c\u0651\u0644 \u0635\u0644\u0627\u0629 \u0627\u0644\u0638\u0647\u0631',\n            '\u2600\ufe0f \u0627\u0644\u0638\u0647\u0631 - \u0635\u0644\u064a\u062a\u061f',\n            '\u2600\ufe0f \u0645\u062a\u0646\u0633\u0627\u0634 \u062a\u0633\u062c\u0644 \u0627\u0644\u0638\u0647\u0631',\n            '\u2600\ufe0f \u0635\u0644\u0627\u0629 \u0627\u0644\u0638\u0647\u0631 '\n        ],\n        'Jumuah': [\n            '\ud83d\udd4c \u0635\u0644\u064a\u062a \u0627\u0644\u062c\u0645\u0639\u0629\u061f',\n            '\ud83d\udd4c \u0633\u062c\u0651\u0644 \u0635\u0644\u0627\u0629 \u0627\u0644\u062c\u0645\u0639\u0629',\n            '\ud83d\udd4c \u062c\u0645\u0639\u0629 \u0645\u0628\u0627\u0631\u0643\u0629 - \u0635\u0644\u064a\u062a\u061f',\n            '\ud83d\udd4c \u062c\u0645\u0639\u0629 \u0645\u0628\u0627\u0631\u0643\u0629 \ud83e\udd0d',\n            '\ud83d\udd4c \u0635\u0644\u0627\u0629 \u0627\u0644\u062c\u0645\u0639\u0629 \ud83e\udd0d'\n        ],\n        'Asr': [\n            '\ud83c\udf24\ufe0f \u0635\u0644\u064a\u062a \u0627\u0644\u0639\u0635\u0631\u061f',\n            '\ud83c\udf24\ufe0f \u0633\u062c\u0651\u0644 \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0635\u0631',\n            '\ud83c\udf24\ufe0f \u0627\u0644\u0639\u0635\u0631 - \u0635\u0644\u064a\u062a\u061f',\n            '\ud83c\udf24\ufe0f \u0645\u062a\u0646\u0633\u0627\u0634 \u062a\u0633\u062c\u0644 \u0627\u0644\u0639\u0635\u0631',\n            '\ud83c\udf24\ufe0f \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0635\u0631 '\n        ],\n        'Maghrib': [\n            '\ud83c\udf05 \u0635\u0644\u064a\u062a \u0627\u0644\u0645\u063a\u0631\u0628\u061f',\n            '\ud83c\udf05 \u0633\u062c\u0651\u0644 \u0635\u0644\u0627\u0629 \u0627\u0644\u0645\u063a\u0631\u0628',\n            '\ud83c\udf05 \u0627\u0644\u0645\u063a\u0631\u0628 - \u0635\u0644\u064a\u062a\u061f',\n            '\ud83c\udf05 \u0645\u062a\u0646\u0633\u0627\u0634 \u062a\u0633\u062c\u0644 \u0627\u0644\u0645\u063a\u0631\u0628',\n            '\ud83c\udf05 \u0635\u0644\u0627\u0629 \u0627\u0644\u0645\u063a\u0631\u0628 '\n        ],\n        'Isha': [\n            '\ud83c\udf19 \u0635\u0644\u064a\u062a \u0627\u0644\u0639\u0634\u0627\u0621\u061f',\n            '\ud83c\udf19 \u0633\u062c\u0651\u0644 \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0634\u0627\u0621',\n            '\ud83c\udf19 \u0627\u0644\u0639\u0634\u0627\u0621 - \u0635\u0644\u064a\u062a\u061f',\n            '\ud83c\udf19 \u0645\u062a\u0646\u0633\u0627\u0634 \u062a\u0633\u062c\u0644 \u0627\u0644\u0639\u0634\u0627\u0621',\n            '\ud83c\udf19 \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0634\u0627\u0621 '\n        ]\n    },\n    female: {\n        'Fajr': [\n            '\ud83c\udf05 \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0641\u062c\u0631\u061f',\n            '\ud83c\udf05 \u0633\u062c\u0651\u0644\u064a \u0635\u0644\u0627\u0629 \u0627\u0644\u0641\u062c\u0631',\n            '\ud83c\udf05 \u0627\u0644\u0641\u062c\u0631 - \u0635\u0644\u064a\u062a\u064a\u061f',\n            '\ud83c\udf05 \u0645\u062a\u0646\u0633\u064a\u0634 \u062a\u0633\u062c\u0644\u064a \u0627\u0644\u0641\u062c\u0631',\n            '\ud83c\udf05 \u0635\u0644\u0627\u0629 \u0627\u0644\u0641\u062c\u0631 '\n        ],\n        'Dhuhr': [\n            '\u2600\ufe0f \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0638\u0647\u0631\u061f',\n            '\u2600\ufe0f \u0633\u062c\u0651\u0644\u064a \u0635\u0644\u0627\u0629 \u0627\u0644\u0638\u0647\u0631',\n            '\u2600\ufe0f \u0627\u0644\u0638\u0647\u0631 - \u0635\u0644\u064a\u062a\u064a\u061f',\n            '\u2600\ufe0f \u0645\u062a\u0646\u0633\u064a\u0634 \u062a\u0633\u062c\u0644\u064a \u0627\u0644\u0638\u0647\u0631',\n            '\u2600\ufe0f \u0635\u0644\u0627\u0629 \u0627\u0644\u0638\u0647\u0631 '\n        ],\n        'Jumuah': [\n            '\ud83d\udd4c \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0638\u0647\u0631\u061f',\n            '\ud83d\udd4c \u0633\u062c\u0651\u0644\u064a \u0635\u0644\u0627\u0629 \u0627\u0644\u0638\u0647\u0631',\n            '\ud83d\udd4c \u0627\u0644\u062c\u0645\u0639\u0629 \u0645\u0628\u0627\u0631\u0643\u0629 - \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0638\u0647\u0631\u061f',\n            '\ud83d\udd4c \u062c\u0645\u0639\u0629 \u0645\u0628\u0627\u0631\u0643\u0629 \ud83e\udd0d',\n            '\ud83d\udd4c \u0635\u0644\u0627\u0629 \u0627\u0644\u0638\u0647\u0631 '\n        ],\n        'Asr': [\n            '\ud83c\udf24\ufe0f \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0639\u0635\u0631\u061f',\n            '\ud83c\udf24\ufe0f \u0633\u062c\u0651\u0644\u064a \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0635\u0631',\n            '\ud83c\udf24\ufe0f \u0627\u0644\u0639\u0635\u0631 - \u0635\u0644\u064a\u062a\u064a\u061f',\n            '\ud83c\udf24\ufe0f \u0645\u062a\u0646\u0633\u064a\u0634 \u062a\u0633\u062c\u0644\u064a \u0627\u0644\u0639\u0635\u0631',\n            '\ud83c\udf24\ufe0f \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0635\u0631 '\n        ],\n        'Maghrib': [\n            '\ud83c\udf05 \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0645\u063a\u0631\u0628\u061f',\n            '\ud83c\udf05 \u0633\u062c\u0651\u0644\u064a \u0635\u0644\u0627\u0629 \u0627\u0644\u0645\u063a\u0631\u0628',\n            '\ud83c\udf05 \u0627\u0644\u0645\u063a\u0631\u0628 - \u0635\u0644\u064a\u062a\u064a\u061f',\n            '\ud83c\udf05 \u0645\u062a\u0646\u0633\u064a\u0634 \u062a\u0633\u062c\u0644\u064a \u0627\u0644\u0645\u063a\u0631\u0628',\n            '\ud83c\udf05 \u0635\u0644\u0627\u0629 \u0627\u0644\u0645\u063a\u0631\u0628 '\n        ],\n        'Isha': [\n            '\ud83c\udf19 \u0635\u0644\u064a\u062a\u064a \u0627\u0644\u0639\u0634\u0627\u0621\u061f',\n            '\ud83c\udf19 \u0633\u062c\u0651\u0644\u064a \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0634\u0627\u0621',\n            '\ud83c\udf19 \u0627\u0644\u0639\u0634\u0627\u0621 - \u0635\u0644\u064a\u062a\u064a\u061f',\n            '\ud83c\udf19 \u0645\u062a\u0646\u0633\u064a\u0634 \u062a\u0633\u062c\u0644\u064a \u0627\u0644\u0639\u0634\u0627\u0621',\n            '\ud83c\udf19 \u0635\u0644\u0627\u0629 \u0627\u0644\u0639\u0634\u0627\u0621 \ud83e\udd0d'\n        ]\n    }\n};\n\n// Helper: Get messages based on gender (defaults to male if null)\nconst getMessages = (prayer) => {\n    if (gender === 'female') {\n        return notifyMessages.female[prayer];\n    } else {\n        return notifyMessages.male[prayer];\n    }\n};\n\n// === PRAYER NOTIFICATIONS & ROASTS ===\nif (!skipPrayerActions) {\n    const prayers = [\n        { name: 'Fajr', time: user.fajr, nextTime: user.dhuhr, notified: user.fajr_notified, roasted: user.fajr_roasted, prayed: user.fajr_prayed },\n        { name: 'Dhuhr', time: user.dhuhr, nextTime: user.asr, notified: user.dhuhr_notified, roasted: user.dhuhr_roasted, prayed: user.dhuhr_prayed, skipOnFriday: true },\n        { name: 'Asr', time: user.asr, nextTime: user.maghrib, notified: user.asr_notified, roasted: user.asr_roasted, prayed: user.asr_prayed },\n        { name: 'Maghrib', time: user.maghrib, nextTime: user.isha, notified: user.maghrib_notified, roasted: user.maghrib_roasted, prayed: user.maghrib_prayed },\n        { name: 'Isha', time: user.isha, nextTime: null, notified: user.isha_notified, roasted: user.isha_roasted, prayed: user.isha_prayed }\n    ];\n\n    for (const p of prayers) {\n        const prayerMinutes = timeToMinutes(p.time);\n        const nextPrayerMinutes = p.nextTime ? timeToMinutes(p.nextTime) : (24 * 60);\n        const diffMins = localMinutes - prayerMinutes;\n        \n        const hasPrayed = p.prayed !== null && p.prayed !== undefined;\n        \n        // === FRIDAY JUMUAH HANDLING ===\n        if (p.name === 'Dhuhr' && isFriday) {\n            if (diffMins >= 0 && !p.notified) {\n                const msgs = getMessages('Jumuah');\n                actions.push({\n                    type: 'NOTIFY',\n                    prayer: 'Dhuhr',\n                    prayerTime: p.time,\n                    isJumuah: true,\n                    user: {\n                        telegram_id: user.telegram_id,\n                        first_name: user.first_name,\n                        timezone: user.timezone,\n                        gender: user.gender\n                    },\n                    message: msgs[Math.floor(Math.random() * msgs.length)]\n                });\n            }\n            continue;\n        }\n        \n        // === NORMAL PRAYER HANDLING ===\n        if (diffMins >= 0 && !p.notified) {\n            const msgs = getMessages(p.name);\n            actions.push({\n                type: 'NOTIFY',\n                prayer: p.name,\n                prayerTime: p.time,\n                user: {\n                    telegram_id: user.telegram_id,\n                    first_name: user.first_name,\n                    timezone: user.timezone,\n                    gender: user.gender\n                },\n                message: msgs[Math.floor(Math.random() * msgs.length)]\n            });\n        }\n        \n        // === ROAST: 60 min after prayer, before next prayer ===\n        if (diffMins >= 60 && localMinutes < nextPrayerMinutes && !hasPrayed && !p.roasted && p.notified) {\n            actions.push({\n                type: 'ROAST',\n                prayer: p.name,\n                prayerTime: p.time,\n                user: {\n                    telegram_id: user.telegram_id,\n                    first_name: user.first_name,\n                    timezone: user.timezone,\n                    gender: user.gender\n                }\n            });\n        }\n    }\n}\n\n// === AZKAR SABAH (Now 30 min after Fajr) ===\nconst fajrMinutes = timeToMinutes(user.fajr);\nconst dhuhrMinutes = timeToMinutes(user.dhuhr);\nconst azkarSabahStart = fajrMinutes + 30; // 30 minutes after Fajr\n\nif (localMinutes >= azkarSabahStart && localMinutes < dhuhrMinutes && !user.azkar_sabah_sent && user.azkar_enabled) {\n    actions.push({\n        type: 'AZKAR_SABAH',\n        user: {\n            telegram_id: user.telegram_id,\n            first_name: user.first_name,\n            timezone: user.timezone,\n            gender: user.gender\n        }\n    });\n}\n\n// === AZKAR MASA (Between Asr and Maghrib) ===\nconst asrMinutes = timeToMinutes(user.asr);\nconst maghribMinutes = timeToMinutes(user.maghrib);\nif (localMinutes >= asrMinutes && localMinutes < maghribMinutes && !user.azkar_masa_sent && user.azkar_enabled) {\n    actions.push({\n        type: 'AZKAR_MASA',\n        user: {\n            telegram_id: user.telegram_id,\n            first_name: user.first_name,\n            timezone: user.timezone,\n            gender: user.gender\n        }\n    });\n}\n\n// === FEEDBACK ===\nif (!isPeriodMode) {\n    const ishaMinutes = timeToMinutes(user.isha);\n    const ishaDiff = localMinutes - ishaMinutes;\n    const hadAnyNotification = user.fajr_notified || user.dhuhr_notified || user.asr_notified || user.maghrib_notified || user.isha_notified;\n    \n    if (ishaDiff >= 180 && !user.feedback_sent) {\n        if (isFirstDay) {\n            actions.push({\n                type: 'FIRST_DAY_FEEDBACK',\n                user: {\n                    telegram_id: user.telegram_id,\n                    first_name: user.first_name,\n                    timezone: user.timezone,\n                    gender: user.gender\n                }\n            });\n        } else if (hadAnyNotification) {\n            actions.push({\n                type: 'FEEDBACK',\n                user: {\n                    telegram_id: user.telegram_id,\n                    first_name: user.first_name,\n                    timezone: user.timezone,\n                    gender: user.gender\n                }\n            });\n        }\n    }\n}\n\n// Return actions or skip\nif (actions.length > 0) {\n    return actions.map(a => ({ json: a }));\n} else {\n    return [{ json: { \n        type: 'SKIP', \n        user_id: user.telegram_id, \n        reason: isFirstDay ? 'first_day' : (isPeriodMode ? 'period_mode' : 'no_actions')\n    } }];\n}"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -528,
        1520
      ],
      "id": "17cd7da4-f38c-4fb4-9282-14ff548c845d",
      "name": "Brain (Optimized)"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.type }}",
                    "rightValue": "NOTIFY",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "b9dd3c1d-dc69-416c-9d8f-23d4c8ee02c1"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "NOTIFY"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.type }}",
                    "rightValue": "ROAST",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "997f28b9-417a-4c7a-9061-d2cc765c2588"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "ROAST"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.type }}",
                    "rightValue": "FEEDBACK",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "20d8fc02-1f44-459c-9151-d825045bb6bf"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "FEEDBACK"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "28aa0c81-d0df-4b14-a962-830c1ab44ff1",
                    "leftValue": "={{ $json.type }}",
                    "rightValue": "AZKAR_SABAH",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "AZKAR_SABAH"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "d22bcad1-651e-4b58-961f-908bbab7bac5",
                    "leftValue": "={{ $json.type }}",
                    "rightValue": "AZKAR_MASA",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "AZKAR_MASA"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "e2df97aa-47eb-43b0-b5c0-6aa0fb169a6f",
                    "leftValue": "={{ $json.type }}",
                    "rightValue": "FIRST_DAY_FEEDBACK",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "FIRST_DAY_FEEDBACK"
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.3,
      "position": [
        -384,
        1440
      ],
      "id": "1cb321aa-8ff8-4afc-bb75-964656a9eb00",
      "name": "Action Switch"
    },
    {
      "parameters": {
        "jsCode": "const prayerAr = {\n    'Fajr': '\u0627\u0644\u0641\u062c\u0631', 'Dhuhr': '\u0627\u0644\u0638\u0647\u0631', 'Asr': '\u0627\u0644\u0639\u0635\u0631', 'Maghrib': '\u0627\u0644\u0645\u063a\u0631\u0628', 'Isha': '\u0627\u0644\u0639\u0634\u0627\u0621'\n}[$json.prayer];\n\nconst name = $json.user.first_name;\nconst gender = $json.user.gender; // Use gender from database\n\nlet roasts = [];\n\nif (gender === 'female') {\n    // Female-specific messages\n    roasts = [\n        // Direct & Clear\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0642\u0648\u0645\u064a \u0635\u0644\u064a.`,\n        `${name}\u060c \u0633\u0627\u0639\u0629 \u0639\u062f\u062a \u0648${prayerAr} \u0644\u0633\u0647.`,\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0644\u0633\u0647 \u0641\u064a\u0647 \u0648\u0642\u062a.`,\n        `${name}\u060c \u0641\u064a\u0646 ${prayerAr}\u061f`,\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0645\u062a\u0623\u062e\u0631\u064a\u0634 \u0623\u0643\u062a\u0631.`,\n        `${name}\u060c \u0644\u0633\u0647 ${prayerAr} \u0645\u062a\u0635\u0644\u062a\u0634.`,\n        \n        // Dunya Reminder\n        `${name}\u060c \u0645\u0641\u064a\u0634 \u062d\u0627\u062c\u0629 \u0641\u064a \u0625\u064a\u062f\u0643 \u062f\u0644\u0648\u0642\u062a\u064a \u0623\u0647\u0645 \u0645\u0646 ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0641\u0627\u0646\u064a\u0629. ${prayerAr} \u0628\u0627\u0642\u064a\u0629. \u0642\u0648\u0645\u064a \u0635\u0644\u064a.`,\n        `${name}\u060c \u0643\u0644 \u062d\u0627\u062c\u0629 \u062a\u0642\u062f\u0631\u064a \u062a\u0623\u062c\u0644\u064a\u0647\u0627 \u0625\u0644\u0627 \u0627\u0644\u0635\u0644\u0627\u0629.`,\n        `${name}\u060c \u0633\u064a\u0628\u064a \u0627\u0644\u062f\u0646\u064a\u0627 \u062f\u0642\u0627\u064a\u0642. ${prayerAr} \u0645\u0633\u062a\u0646\u064a\u0627\u0643\u064a.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0647\u062a\u0641\u0636\u0644 \u0645\u0648\u062c\u0648\u062f\u0629 \u0628\u0639\u062f \u0645\u0627 \u062a\u0635\u0644\u064a. \u0642\u0648\u0645\u064a.`,\n        `${name}\u060c \u0627\u0644\u0644\u064a \u0634\u0627\u063a\u0644\u0643 \u062f\u0644\u0648\u0642\u062a\u064a \u0645\u0634 \u0647\u064a\u0641\u0631\u0642 \u0628\u0643\u0631\u0629. ${prayerAr} \u0647\u062a\u0641\u0631\u0642.`,\n        `${name}\u060c \u0665 \u062f\u0642\u0627\u064a\u0642 \u0644\u0631\u0628\u0646\u0627 \u0645\u0634 \u0647\u062a\u0623\u062e\u0631 \u062d\u0627\u062c\u0629. \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0645\u0647\u0645\u0627 \u0627\u0644\u0644\u064a \u0628\u062a\u0639\u0645\u0644\u064a\u0647 \u0645\u0647\u0645\u060c ${prayerAr} \u0623\u0647\u0645.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0645\u0634\u063a\u0644\u0627\u0643\u064a \u0639\u0646 \u0625\u064a\u0647\u061f \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n\n        // Mortality Reminder\n        `${name}\u060c \u0627\u0644\u0639\u0645\u0631 \u0628\u064a\u062c\u0631\u064a. ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a.`,\n        `${name}\u060c \u0643\u0644 \u0635\u0644\u0627\u0629 \u0628\u062a\u0639\u062f\u064a \u0645\u0646 \u063a\u064a\u0631 \u0645\u0627 \u062a\u062a\u0635\u0644\u064a \u0645\u0634 \u0631\u0627\u062c\u0639\u0629.`,\n        `${name}\u060c \u0645\u064a\u0646 \u0636\u0627\u0645\u0646 \u0628\u0643\u0631\u0629\u061f \u0635\u0644\u064a ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0644\u064a \u0631\u0627\u062d \u0645\u0634 \u0631\u0627\u062c\u0639. \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0623\u0648\u0644 \u0633\u0624\u0627\u0644 \u0647\u062a\u062a\u0633\u0623\u0644\u064a \u0639\u0646\u0647 \u0627\u0644\u0635\u0644\u0627\u0629. \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0645\u0648\u062a \u0645\u0634 \u0628\u064a\u0633\u062a\u0623\u0630\u0646. \u0635\u0644\u064a ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0645\u0634 \u0639\u0627\u0631\u0641\u0629 \u0641\u0627\u0636\u0644\u0643 \u0643\u0627\u0645 \u0635\u0644\u0627\u0629 \u0641\u064a \u062d\u064a\u0627\u062a\u0643. \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0643\u0644 \u0646\u064e\u0641\u064e\u0633 \u0628\u062a\u0627\u062e\u062f\u064a\u0647 \u0645\u0634 \u0645\u0636\u0645\u0648\u0646. \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0645\u0644\u0627\u064a\u0643\u0629 \u0628\u062a\u0643\u062a\u0628 \u062f\u0644\u0648\u0642\u062a\u064a. ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a.`,\n        `${name}\u060c \u0627\u0644\u0642\u0628\u0631 \u0645\u0641\u064a\u0647\u0648\u0634 \u062a\u0623\u062c\u064a\u0644. \u0635\u0644\u064a ${prayerAr}.`,\n        \n        // Reflective Questions\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0623\u062e\u0631\u0643 \u0639\u0646 ${prayerAr}\u061f`,\n        `${name}\u060c \u0647\u0644 \u0627\u0644\u0644\u064a \u0628\u062a\u0639\u0645\u0644\u064a\u0647 \u062f\u0644\u0648\u0642\u062a\u064a \u064a\u0633\u062a\u0627\u0647\u0644 \u062a\u0623\u062e\u064a\u0631 ${prayerAr}\u061f`,\n        `${name}\u060c \u0628\u062a\u0623\u062c\u0644\u064a \u0644\u064a\u0647\u061f ${prayerAr} \u0645\u0634 \u0647\u062a\u0627\u062e\u062f \u063a\u064a\u0631 \u062f\u0642\u0627\u064a\u0642.`,\n        `${name}\u060c \u0645\u0633\u062a\u0646\u064a\u0629 \u0625\u064a\u0647\u061f`,\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0627\u0633\u0643\u0643\u061f \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0644\u064a\u0647 \u0628\u062a\u0623\u062e\u0631\u064a \u0639\u0644\u0649 \u0631\u0628\u0646\u0627\u061f`,\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0623\u0647\u0645 \u0645\u0646 ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a\u061f`,\n        \n        // Time & Regret\n        `${name}\u060c \u0643\u0644 \u0645\u0631\u0629 \u0628\u062a\u0623\u062c\u0644\u064a \u0628\u062a\u0628\u0639\u062f\u064a \u0623\u0643\u062a\u0631. \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0628\u064a\u0639\u062f\u064a. ${prayerAr} \u0644\u0633\u0647 \u0645\u0633\u062a\u0646\u064a\u0627\u0643\u064a.`,\n        `${name}\u060c \u0628\u0643\u0631\u0629 \u0647\u062a\u062a\u0645\u0646\u064a \u0625\u0646\u0643 \u0635\u0644\u064a\u062a\u064a. \u0642\u0648\u0645\u064a \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0644\u064a \u0628\u064a\u0639\u062f\u064a \u0645\u0634 \u0631\u0627\u062c\u0639. \u0635\u0644\u064a ${prayerAr}.`,\n        \n        // Motivational\n        `${name}\u060c \u0642\u0648\u0645\u064a \u062f\u0644\u0648\u0642\u062a\u064a. \u0645\u0634 \u0645\u062d\u062a\u0627\u062c\u0629 \u063a\u064a\u0631 \u062f\u0642\u0627\u064a\u0642.`,\n        `${name}\u060c ${prayerAr} \u0645\u0634 \u0647\u062a\u0627\u062e\u062f \u0645\u0646 \u0648\u0642\u062a\u0643 \u062d\u0627\u062c\u0629.`,\n        `${name}\u060c \u0644\u0633\u0647 \u0641\u064a\u0647 \u0641\u0631\u0635\u0629. \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0642\u0648\u0645\u064a \u0635\u0644\u064a ${prayerAr} \u0648\u0627\u0631\u062c\u0639\u064a \u0643\u0645\u0644\u064a \u0627\u0644\u0644\u064a \u0628\u062a\u0639\u0645\u0644\u064a\u0647.`,\n        `${name}\u060c \u0631\u0627\u062d\u0629 \u0628\u0627\u0644\u0643 \u0641\u064a \u0627\u0644\u0635\u0644\u0627\u0629. \u0642\u0648\u0645\u064a \u062c\u0631\u0628\u064a.`,\n        `${name}\u060c \u0642\u0644\u0628\u0643 \u0645\u062d\u062a\u0627\u062c ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a. \u0642\u0648\u0645\u064a.`,\n        \n        // Short & Powerful\n        `${name}\u060c \u0642\u0648\u0645\u064a.`,\n        `${name}\u060c ${prayerAr}. \u0631\u0628\u0646\u0627 \u0645\u0633\u062a\u0646\u064a\u0643\u064a.`,\n        `${name}\u060c \u064a\u0644\u0627.`,\n        `${name}\u060c ${prayerAr}. \u0642\u0648\u0645\u064a.`,\n        `${name}\u060c \u0631\u0628\u0646\u0627 \u0645\u0633\u062a\u0646\u064a\u0643\u064a.`\n    ];\n} else if (gender === 'male') {\n    // Male-specific messages\n    roasts = [\n        // Direct & Clear\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0642\u0648\u0645 \u0635\u0644\u064a.`,\n        `${name}\u060c \u0633\u0627\u0639\u0629 \u0639\u062f\u062a \u0648${prayerAr} \u0644\u0633\u0647.`,\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0644\u0633\u0647 \u0641\u064a\u0647 \u0648\u0642\u062a.`,\n        `${name}\u060c \u0641\u064a\u0646 ${prayerAr}\u061f`,\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0645\u062a\u0623\u062e\u0631\u0634 \u0623\u0643\u062a\u0631.`,\n        `${name}\u060c \u0644\u0633\u0647 ${prayerAr} \u0645\u062a\u0635\u0644\u062a\u0634.`,\n        \n        // Dunya Reminder\n        `${name}\u060c \u0645\u0641\u064a\u0634 \u062d\u0627\u062c\u0629 \u0641\u064a \u0625\u064a\u062f\u0643 \u062f\u0644\u0648\u0642\u062a\u064a \u0623\u0647\u0645 \u0645\u0646 ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0641\u0627\u0646\u064a\u0629. ${prayerAr} \u0628\u0627\u0642\u064a\u0629. \u0642\u0648\u0645 \u0635\u0644\u064a.`,\n        `${name}\u060c \u0643\u0644 \u062d\u0627\u062c\u0629 \u062a\u0642\u062f\u0631 \u062a\u0623\u062c\u0644\u0647\u0627 \u0625\u0644\u0627 \u0627\u0644\u0635\u0644\u0627\u0629.`,\n        `${name}\u060c \u0633\u064a\u0628 \u0627\u0644\u062f\u0646\u064a\u0627 \u062f\u0642\u0627\u064a\u0642. ${prayerAr} \u0645\u0633\u062a\u0646\u064a\u0627\u0643.`,\n        `${name}\u060c \u0627\u0644\u0644\u064a \u0634\u0627\u063a\u0644\u0643 \u062f\u0644\u0648\u0642\u062a\u064a \u0645\u0634 \u0647\u064a\u0641\u0631\u0642 \u0628\u0643\u0631\u0629. ${prayerAr} \u0647\u062a\u0641\u0631\u0642.`,\n        `${name}\u060c \u0665 \u062f\u0642\u0627\u064a\u0642 \u0644\u0631\u0628\u0646\u0627 \u0645\u0634 \u0647\u062a\u0623\u062e\u0631 \u062d\u0627\u062c\u0629. \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0645\u0647\u0645\u0627 \u0627\u0644\u0644\u064a \u0628\u062a\u0639\u0645\u0644\u0647 \u0645\u0647\u0645\u060c ${prayerAr} \u0623\u0647\u0645.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0645\u0634\u063a\u0644\u0627\u0643 \u0639\u0646 \u0625\u064a\u0647\u061f \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n\n        // Mortality Reminder\n        `${name}\u060c \u0627\u0644\u0639\u0645\u0631 \u0628\u064a\u062c\u0631\u064a. ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a.`,\n        `${name}\u060c \u0645\u064a\u0646 \u0636\u0627\u0645\u0646 \u0628\u0643\u0631\u0629\u061f \u0635\u0644\u064a ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0644\u064a \u0631\u0627\u062d \u0645\u0634 \u0631\u0627\u062c\u0639. \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0623\u0648\u0644 \u0633\u0624\u0627\u0644 \u0647\u062a\u062a\u0633\u0623\u0644\u0647 \u0639\u0646 \u0627\u0644\u0635\u0644\u0627\u0629. \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0645\u0648\u062a \u0645\u0634 \u0628\u064a\u0633\u062a\u0623\u0630\u0646. \u0635\u0644\u064a ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0645\u0634 \u0639\u0627\u0631\u0641 \u0641\u0627\u0636\u0644\u0643 \u0643\u0627\u0645 \u0635\u0644\u0627\u0629 \u0641\u064a \u062d\u064a\u0627\u062a\u0643. \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0643\u0644 \u0646\u064e\u0641\u064e\u0633 \u0628\u062a\u0627\u062e\u062f\u0647 \u0645\u0634 \u0645\u0636\u0645\u0648\u0646. \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0645\u0644\u0627\u064a\u0643\u0629 \u0628\u062a\u0643\u062a\u0628 \u062f\u0644\u0648\u0642\u062a\u064a. ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a.`,\n        `${name}\u060c \u0627\u0644\u0642\u0628\u0631 \u0645\u0641\u064a\u0647\u0648\u0634 \u062a\u0623\u062c\u064a\u0644. \u0635\u0644\u064a ${prayerAr}.`,\n        \n        // Reflective Questions\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0623\u062e\u0631\u0643 \u0639\u0646 ${prayerAr}\u061f`,\n        `${name}\u060c \u0647\u0644 \u0627\u0644\u0644\u064a \u0628\u062a\u0639\u0645\u0644\u0647 \u062f\u0644\u0648\u0642\u062a\u064a \u064a\u0633\u062a\u0627\u0647\u0644 \u062a\u0623\u062e\u064a\u0631 ${prayerAr}\u061f`,\n        `${name}\u060c \u0628\u062a\u0623\u062c\u0644 \u0644\u064a\u0647\u061f ${prayerAr} \u0645\u0634 \u0647\u062a\u0627\u062e\u062f \u063a\u064a\u0631 \u062f\u0642\u0627\u064a\u0642.`,\n        `${name}\u060c \u0645\u0633\u062a\u0646\u064a \u0625\u064a\u0647\u061f`,\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0627\u0633\u0643\u0643\u061f \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0644\u064a\u0647 \u0628\u062a\u0623\u062e\u0631 \u0639\u0644\u0649 \u0631\u0628\u0646\u0627\u061f`,\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0623\u0647\u0645 \u0645\u0646 ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a\u061f`,\n        \n        // Time & Regret\n        `${name}\u060c \u0643\u0644 \u0645\u0631\u0629 \u0628\u062a\u0623\u062c\u0644 \u0628\u062a\u0628\u0639\u062f \u0623\u0643\u062a\u0631. \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0628\u064a\u0639\u062f\u064a. ${prayerAr} \u0644\u0633\u0647 \u0645\u0633\u062a\u0646\u064a\u0627\u0643.`,\n        `${name}\u060c \u0628\u0643\u0631\u0629 \u0647\u062a\u062a\u0645\u0646\u0649 \u0625\u0646\u0643 \u0635\u0644\u064a\u062a. \u0642\u0648\u0645 \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0644\u064a \u0628\u064a\u0639\u062f\u064a \u0645\u0634 \u0631\u0627\u062c\u0639. \u0635\u0644\u064a ${prayerAr}.`,\n        \n        // Motivational\n        `${name}\u060c \u0642\u0648\u0645 \u062f\u0644\u0648\u0642\u062a\u064a. \u0645\u0634 \u0645\u062d\u062a\u0627\u062c \u063a\u064a\u0631 \u062f\u0642\u0627\u064a\u0642.`,\n        `${name}\u060c ${prayerAr} \u0645\u0634 \u0647\u062a\u0627\u062e\u062f \u0645\u0646 \u0648\u0642\u062a\u0643 \u062d\u0627\u062c\u0629.`,\n        `${name}\u060c \u0644\u0633\u0647 \u0641\u064a\u0647 \u0641\u0631\u0635\u0629. \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0642\u0648\u0645 \u0635\u0644\u064a ${prayerAr} \u0648\u0627\u0631\u062c\u0639 \u0643\u0645\u0651\u0644 \u0627\u0644\u0644\u064a \u0628\u062a\u0639\u0645\u0644\u0647.`,\n        `${name}\u060c \u0631\u0627\u062d\u0629 \u0628\u0627\u0644\u0643 \u0641\u064a \u0627\u0644\u0635\u0644\u0627\u0629. \u0642\u0648\u0645 \u062c\u0631\u0628.`,\n        `${name}\u060c \u0642\u0644\u0628\u0643 \u0645\u062d\u062a\u0627\u062c ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a. \u0642\u0648\u0645.`,\n        \n        // Short & Powerful\n        `${name}\u060c \u0642\u0648\u0645.`,\n        `${name}\u060c ${prayerAr}. \u0631\u0628\u0646\u0627 \u0645\u0633\u062a\u0646\u064a\u0643.`,\n        `${name}\u060c \u064a\u0644\u0627.`,\n        `${name}\u060c ${prayerAr}. \u0642\u0648\u0645.`,\n        `${name}\u060c \u0631\u0628\u0646\u0627 \u0645\u0633\u062a\u0646\u064a\u0643.`\n    ];\n} else {\n    // Gender-neutral messages (for unknown names)\n    roasts = [\n        // Direct & Clear (no gendered verbs)\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u064a\u0644\u0627 \u0635\u0644\u064a.`,\n        `${name}\u060c \u0633\u0627\u0639\u0629 \u0639\u062f\u062a \u0648${prayerAr} \u0644\u0633\u0647.`,\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0644\u0633\u0647 \u0641\u064a\u0647 \u0648\u0642\u062a.`,\n        `${name}\u060c \u0641\u064a\u0646 ${prayerAr}\u061f`,\n        `${name}\u060c ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a. \u0627\u0644\u0648\u0642\u062a \u0628\u064a\u062c\u0631\u064a.`,\n        `${name}\u060c \u0644\u0633\u0647 ${prayerAr} \u0645\u062a\u0635\u0644\u062a\u0634.`,\n        \n        // Dunya Reminder\n        `${name}\u060c \u0645\u0641\u064a\u0634 \u062d\u0627\u062c\u0629 \u062f\u0644\u0648\u0642\u062a\u064a \u0623\u0647\u0645 \u0645\u0646 ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0641\u0627\u0646\u064a\u0629. ${prayerAr} \u0628\u0627\u0642\u064a\u0629. \u064a\u0644\u0627 \u0635\u0644\u064a.`,\n        `${name}\u060c \u0643\u0644 \u062d\u0627\u062c\u0629 \u0645\u0645\u0643\u0646 \u062a\u062a\u0623\u062c\u0644 \u0625\u0644\u0627 \u0627\u0644\u0635\u0644\u0627\u0629.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u062a\u0633\u062a\u0646\u0649 \u062f\u0642\u0627\u064a\u0642. ${prayerAr} \u0645\u0633\u062a\u0646\u064a\u0629.`,\n        `${name}\u060c \u0627\u0644\u062f\u0646\u064a\u0627 \u0647\u062a\u0641\u0636\u0644 \u0645\u0648\u062c\u0648\u062f\u0629 \u0628\u0639\u062f \u0627\u0644\u0635\u0644\u0627\u0629. \u064a\u0644\u0627.`,\n        `${name}\u060c \u0627\u0644\u0644\u064a \u0634\u0627\u063a\u0644\u0643 \u062f\u0644\u0648\u0642\u062a\u064a \u0645\u0634 \u0647\u064a\u0641\u0631\u0642 \u0628\u0643\u0631\u0629. ${prayerAr} \u0647\u062a\u0641\u0631\u0642.`,\n        `${name}\u060c \u0665 \u062f\u0642\u0627\u064a\u0642 \u0644\u0631\u0628\u0646\u0627 \u0645\u0634 \u0647\u062a\u0623\u062e\u0631 \u062d\u0627\u062c\u0629. \u064a\u0644\u0627 ${prayerAr}.`,\n\n        // Mortality Reminder\n        `${name}\u060c \u0627\u0644\u0639\u0645\u0631 \u0628\u064a\u062c\u0631\u064a. ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a.`,\n        `${name}\u060c \u0643\u0644 \u0635\u0644\u0627\u0629 \u0628\u062a\u0639\u062f\u064a \u0645\u0634 \u0631\u0627\u062c\u0639\u0629.`,\n        `${name}\u060c \u0645\u064a\u0646 \u0636\u0627\u0645\u0646 \u0628\u0643\u0631\u0629\u061f \u064a\u0644\u0627 ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0644\u064a \u0631\u0627\u062d \u0645\u0634 \u0631\u0627\u062c\u0639. \u064a\u0644\u0627 ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0645\u0648\u062a \u0645\u0634 \u0628\u064a\u0633\u062a\u0623\u0630\u0646. \u064a\u0644\u0627 ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0643\u0644 \u0646\u064e\u0641\u064e\u0633 \u0645\u0634 \u0645\u0636\u0645\u0648\u0646. \u064a\u0644\u0627 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0645\u0644\u0627\u064a\u0643\u0629 \u0628\u062a\u0643\u062a\u0628 \u062f\u0644\u0648\u0642\u062a\u064a. ${prayerAr} \u0627\u062a\u0623\u062e\u0631\u062a.`,\n        `${name}\u060c \u0627\u0644\u0642\u0628\u0631 \u0645\u0641\u064a\u0647\u0648\u0634 \u062a\u0623\u062c\u064a\u0644. \u064a\u0644\u0627 ${prayerAr}.`,\n        \n        // Reflective Questions\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0623\u062e\u0631 ${prayerAr}\u061f`,\n        `${name}\u060c \u0647\u0644 \u0627\u0644\u0644\u064a \u0628\u064a\u062d\u0635\u0644 \u062f\u0644\u0648\u0642\u062a\u064a \u064a\u0633\u062a\u0627\u0647\u0644 \u062a\u0623\u062e\u064a\u0631 ${prayerAr}\u061f`,\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0623\u0647\u0645\u061f`,\n        `${name}\u060c \u0627\u0644\u062a\u0623\u062c\u064a\u0644 \u0644\u064a\u0647\u061f ${prayerAr} \u0645\u0634 \u0647\u062a\u0627\u062e\u062f \u063a\u064a\u0631 \u062f\u0642\u0627\u064a\u0642.`,\n        `${name}\u060c \u0627\u0644\u0627\u0633\u062a\u0646\u0649 \u0644\u0625\u064a\u0647\u061f`,\n        `${name}\u060c \u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0627\u0646\u0639\u061f \u064a\u0644\u0627 \u0635\u0644\u064a ${prayerAr}.`,\n        \n        // Time & Regret\n        `${name}\u060c \u0643\u0644 \u062a\u0623\u062c\u064a\u0644 \u0628\u064a\u0628\u0639\u062f \u0623\u0643\u062a\u0631. \u064a\u0644\u0627 \u0635\u0644\u064a ${prayerAr}.`,\n        `${name}\u060c \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0628\u064a\u0639\u062f\u064a. ${prayerAr} \u0644\u0633\u0647 \u0645\u0633\u062a\u0646\u064a\u0629.`,\n        `${name}\u060c \u0628\u0643\u0631\u0629 \u0627\u0644\u0646\u062f\u0645 \u0645\u0634 \u0647\u064a\u0646\u0641\u0639. \u064a\u0644\u0627 \u062f\u0644\u0648\u0642\u062a\u064a.`,\n        `${name}\u060c \u0627\u0644\u0648\u0642\u062a \u0627\u0644\u0644\u064a \u0628\u064a\u0639\u062f\u064a \u0645\u0634 \u0631\u0627\u062c\u0639. \u064a\u0644\u0627 ${prayerAr}.`,\n        \n        // Motivational\n        `${name}\u060c \u064a\u0644\u0627 \u062f\u0644\u0648\u0642\u062a\u064a. \u062f\u0642\u0627\u064a\u0642 \u0628\u0633.`,\n        `${name}\u060c ${prayerAr} \u0645\u0634 \u0647\u062a\u0627\u062e\u062f \u0645\u0646 \u0627\u0644\u0648\u0642\u062a \u062d\u0627\u062c\u0629.`,\n        `${name}\u060c \u0644\u0633\u0647 \u0641\u064a\u0647 \u0641\u0631\u0635\u0629. \u064a\u0644\u0627 ${prayerAr}.`,\n        `${name}\u060c \u0635\u0644\u064a ${prayerAr} \u0648\u0643\u0645\u0644 \u0628\u0639\u062f\u0647\u0627.`,\n        `${name}\u060c \u0631\u0627\u062d\u0629 \u0627\u0644\u0628\u0627\u0644 \u0641\u064a \u0627\u0644\u0635\u0644\u0627\u0629. \u064a\u0644\u0627 \u062c\u0631\u0628.`,\n        `${name}\u060c \u0627\u0644\u0642\u0644\u0628 \u0645\u062d\u062a\u0627\u062c ${prayerAr} \u062f\u0644\u0648\u0642\u062a\u064a. \u064a\u0644\u0627.`,\n        \n        // Short & Powerful\n        `${name}\u060c \u064a\u0644\u0627.`,\n        `${name}\u060c ${prayerAr}. \u0631\u0628\u0646\u0627 \u0645\u0633\u062a\u0646\u064a.`,\n        `${name}\u060c ${prayerAr}. \u064a\u0644\u0627.`,\n        `${name}\u060c \u0631\u0628\u0646\u0627 \u0645\u0633\u062a\u0646\u064a.`,\n        `${name}\u060c ${prayerAr} \u0645\u0633\u062a\u0646\u064a\u0629.`\n    ];\n}\n\nreturn {\n    json: {\n        ...$json,\n        text: roasts[Math.floor(Math.random() * roasts.length)],\n        detectedGender: gender\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -16,
        1344
      ],
      "id": "85869072-2a10-4d86-930c-412df7b7f211",
      "name": "Prepare Roast"
    },
    {
      "parameters": {
        "chatId": "={{ $json.user.telegram_id }}",
        "text": "={{ $json.text }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        176,
        1344
      ],
      "id": "ed63e92a-d722-4f87-899d-7263c52addc8",
      "name": "Send Roast",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "UPDATE prayer_times_cache \nSET {{ $('Brain (Optimized)').item.json.prayer.toLowerCase() }}_roasted = TRUE \nWHERE user_id = {{ $('Brain (Optimized)').item.json.user.telegram_id }} \n  AND date = (NOW() AT TIME ZONE '{{ $('Brain (Optimized)').item.json.user.timezone }}')::date;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        384,
        1344
      ],
      "id": "6a12b15f-ff21-4cae-8812-14f27f076aca",
      "name": "Mark Roasted",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const dbData = $input.first().json;\nconst userInfo = $('Action Switch').item.json.user;\n\nconst prayerMap = {\n    'Fajr': '\u0627\u0644\u0641\u062c\u0631',\n    'Dhuhr': '\u0627\u0644\u0638\u0647\u0631',\n    'Asr': '\u0627\u0644\u0639\u0635\u0631',\n    'Maghrib': '\u0627\u0644\u0645\u063a\u0631\u0628',\n    'Isha': '\u0627\u0644\u0639\u0634\u0627\u0621'\n};\n\nconst formatTime = (timestamp) => {\n    if (!timestamp) return null;\n    const date = new Date(timestamp);\n    const hour = date.getHours();\n    const minutes = date.getMinutes();\n    const displayHour = hour > 12 ? hour - 12 : (hour === 0 ? 12 : hour);\n    const period = hour >= 12 ? '\u0645' : '\u0635';\n    return `${displayHour}:${minutes.toString().padStart(2, '0')}${period}`;\n};\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// PRAYER ANALYSIS\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst prayers = ['Fajr', 'Dhuhr', 'Asr', 'Maghrib', 'Isha'];\nlet onTimeCount = 0;\nlet qadaCount = 0;\nlet missedCount = 0;\nlet skippedCount = 0;\n\nlet onTimePrayers = [];\nlet qadaPrayers = [];\nlet missedPrayers = [];\n\nprayers.forEach(prayer => {\n    const loggedTime = dbData[prayer] || dbData[prayer.toLowerCase()];\n    const prayerStatus = dbData[`${prayer.toLowerCase()}_status`];\n    const wasNotified = dbData[`${prayer.toLowerCase()}_notified`];\n    const arabicName = prayerMap[prayer];\n    \n    if (!wasNotified) {\n        skippedCount++;\n        return;\n    }\n    \n    if (!loggedTime) {\n        missedCount++;\n        missedPrayers.push(arabicName);\n    } else if (prayerStatus === 'qada') {\n        qadaCount++;\n        qadaPrayers.push(arabicName);\n    } else {\n        onTimeCount++;\n        onTimePrayers.push(arabicName);\n    }\n});\n\nconst notifiedPrayers = 5 - skippedCount;\nconst totalPrayed = onTimeCount + qadaCount;\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// QUALITY SCORE CALCULATION\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst qualityScore = (onTimeCount * 3) + (qadaCount * 1);\nconst maxPossibleScore = notifiedPrayers * 3;\nconst qualityPercentage = maxPossibleScore > 0 ? Math.round((qualityScore / maxPossibleScore) * 100) : 0;\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// SPECIAL CONDITIONS\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst ishaNotified = dbData.isha_notified;\nconst ishaPrayed = dbData.Isha || dbData.isha;\nconst isIshaPending = ishaNotified && !ishaPrayed;\n\nconst currentStreak = dbData.consecutive_perfect_days || 0;\nconst bestStreak = dbData.best_streak || 0;\nconst isNewRecord = currentStreak > bestStreak && currentStreak > 0;\n\nconst daysSinceRegistration = dbData.days_since_registration || 0;\nconst isFirstDay = skippedCount > 0 || daysSinceRegistration === 0;\n\nconst isPerfect = onTimeCount === notifiedPrayers && notifiedPrayers > 0;\nconst isAllQada = qadaCount === notifiedPrayers && notifiedPrayers > 0 && qadaCount > 0;\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FEATURE STATS\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst userName = userInfo.first_name || dbData.first_name;\nconst gender = userInfo.gender || dbData.gender || 'unknown';\nconst isFemale = gender === 'female';\nconst isMale = gender === 'male';\n\n// Sunnah\nconst sunnahEnabled = dbData.sunnah_enabled || false;\nlet sunnahCount = 0;\nif (dbData.fajr_sunnah_2) sunnahCount++;\nif (dbData.dhuhr_sunnah_4_before) sunnahCount++;\nif (dbData.dhuhr_sunnah_2_after) sunnahCount++;\nif (dbData.maghrib_sunnah_2) sunnahCount++;\nif (dbData.isha_sunnah_2) sunnahCount++;\n\n// Masjid (males only)\nconst masjidEnabled = dbData.masjid_prayer_enabled || false;\nlet masjidCount = 0;\nif (dbData.fajr_masjid) masjidCount++;\nif (dbData.dhuhr_masjid) masjidCount++;\nif (dbData.asr_masjid) masjidCount++;\nif (dbData.maghrib_masjid) masjidCount++;\nif (dbData.isha_masjid) masjidCount++;\n\n// Azkar\nconst azkarEnabled = dbData.azkar_enabled !== false; // default true\nconst azkarSabahDone = dbData.azkar_sabah_done || false;\nconst azkarMasaDone = dbData.azkar_masa_done || false;\nconst azkarCount = (azkarSabahDone ? 1 : 0) + (azkarMasaDone ? 1 : 0);\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// GRADUAL IMPROVEMENT GUIDANCE (for enabled features)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nlet featureGuidance = [];\n\n// Sunnah guidance (if enabled)\nif (sunnahEnabled) {\n    if (sunnahCount === 0) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0633\u0646\u0646',\n            status: '\u0644\u0645 \u062a\u0635\u0644\u0650 \u0623\u064a \u0633\u0646\u0629',\n            guidance: '\u062c\u0631\u0628 \u0628\u0643\u0631\u0629 \u062a\u0635\u0644\u064a \u0633\u0646\u0629 \u0627\u0644\u0641\u062c\u0631 - \u0631\u0643\u0639\u062a\u064a\u0646 \u0628\u0633 \u0642\u0628\u0644 \u0627\u0644\u0641\u0631\u0636',\n            tone: 'encourage_start'\n        });\n    } else if (sunnahCount === 1) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0633\u0646\u0646',\n            status: `\u0633\u0646\u0629 \u0648\u0627\u062d\u062f\u0629`,\n            guidance: '\u062d\u0627\u0648\u0644 \u062a\u0636\u064a\u0641 \u0633\u0646\u0629 \u0627\u0644\u0638\u0647\u0631 \u0627\u0644\u0642\u0628\u0644\u064a\u0629 - 4 \u0631\u0643\u0639\u0627\u062a',\n            tone: 'encourage_more'\n        });\n    } else if (sunnahCount === 2) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0633\u0646\u0646',\n            status: `\u0633\u0646\u062a\u064a\u0646`,\n            guidance: '\u0643\u0648\u064a\u0633! \u062d\u0627\u0648\u0644 \u062a\u0648\u0635\u0644 3 \u0628\u0643\u0631\u0629',\n            tone: 'encourage_more'\n        });\n    } else if (sunnahCount >= 3 && sunnahCount < 5) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0633\u0646\u0646',\n            status: `${sunnahCount} \u0633\u0646\u0646`,\n            guidance: '\u0642\u0631\u0628\u062a \u0645\u0646 \u0627\u0644\u062e\u0645\u0633\u0629! \u0643\u0645\u0651\u0644',\n            tone: 'almost_there'\n        });\n    } else if (sunnahCount === 5) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0633\u0646\u0646',\n            status: '\u0643\u0644 \u0627\u0644\u0633\u0646\u0646 \u2713',\n            guidance: null, // Perfect - no guidance needed\n            tone: 'perfect'\n        });\n    }\n}\n\n// Masjid guidance (if enabled - males only)\nif (masjidEnabled && isMale) {\n    if (masjidCount === 0) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u062c\u0645\u0627\u0639\u0629',\n            status: '\u0644\u0645 \u062a\u0635\u0644\u0650 \u0641\u064a \u0627\u0644\u0645\u0633\u062c\u062f',\n            guidance: '\u062d\u0627\u0648\u0644 \u0628\u0643\u0631\u0629 \u062a\u0635\u0644\u064a \u0635\u0644\u0627\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u064a \u0627\u0644\u0645\u0633\u062c\u062f ',\n            tone: 'encourage_start'\n        });\n    } else if (masjidCount === 1) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u062c\u0645\u0627\u0639\u0629',\n            status: '\u0635\u0644\u0627\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u064a \u0627\u0644\u0645\u0633\u062c\u062f',\n            guidance: '\u062d\u0627\u0648\u0644 \u062a\u0632\u0648\u062f \u0635\u0644\u0627\u0629 \u062a\u0627\u0646\u064a\u0629 - \u0627\u0644\u0645\u063a\u0631\u0628 \u0645\u062b\u0644\u0627\u064b',\n            tone: 'encourage_more'\n        });\n    } else if (masjidCount === 2) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u062c\u0645\u0627\u0639\u0629',\n            status: '\u0635\u0644\u0627\u062a\u064a\u0646 \u0641\u064a \u0627\u0644\u0645\u0633\u062c\u062f',\n            guidance: '\u0643\u0648\u064a\u0633! \u062d\u0627\u0648\u0644 \u062a\u0648\u0635\u0644 3',\n            tone: 'encourage_more'\n        });\n    } else if (masjidCount >= 3 && masjidCount < 5) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u062c\u0645\u0627\u0639\u0629',\n            status: `${masjidCount} \u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0627\u0644\u0645\u0633\u062c\u062f`,\n            guidance: '\u0645\u0627\u0634\u0627\u0621 \u0627\u0644\u0644\u0647! \u0642\u0631\u0628\u062a \u0645\u0646 \u0627\u0644\u062e\u0645\u0633\u0629',\n            tone: 'almost_there'\n        });\n    } else if (masjidCount === 5) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u062c\u0645\u0627\u0639\u0629',\n            status: '\u0643\u0644 \u0627\u0644\u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0627\u0644\u0645\u0633\u062c\u062f \u2713',\n            guidance: null,\n            tone: 'perfect'\n        });\n    }\n}\n\n// Azkar guidance (if enabled)\nif (azkarEnabled) {\n    if (azkarCount === 0) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0623\u0630\u0643\u0627\u0631',\n            status: '\u0644\u0645 \u062a\u0642\u0631\u0623 \u0627\u0644\u0623\u0630\u0643\u0627\u0631',\n            guidance: '\u062d\u0627\u0648\u0644 \u0628\u0643\u0631\u0629 \u062a\u0642\u0631\u0623 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u0628\u0639\u062f \u0627\u0644\u0641\u062c\u0631 - 5 \u062f\u0642\u0627\u064a\u0642 \u0628\u0633',\n            tone: 'encourage_start'\n        });\n    } else if (azkarCount === 1) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0623\u0630\u0643\u0627\u0631',\n            status: azkarSabahDone ? '\u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u2713' : '\u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621 \u2713',\n            guidance: azkarSabahDone ? '\u062d\u0627\u0648\u0644 \u062a\u0636\u064a\u0641 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621 \u0628\u0639\u062f \u0627\u0644\u0639\u0635\u0631' : '\u062d\u0627\u0648\u0644 \u062a\u0636\u064a\u0641 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u0628\u0639\u062f \u0627\u0644\u0641\u062c\u0631',\n            tone: 'encourage_more'\n        });\n    } else if (azkarCount === 2) {\n        featureGuidance.push({\n            feature: '\u0627\u0644\u0623\u0630\u0643\u0627\u0631',\n            status: '\u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u0648\u0627\u0644\u0645\u0633\u0627\u0621 \u2713',\n            guidance: null,\n            tone: 'perfect'\n        });\n    }\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// FEATURE SUGGESTION (for users ready for next level)\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nlet featureSuggestion = null;\n\n// Only suggest if:\n// 1. Today was good (at least 4 on-time OR perfect)\n// 2. User has been using the app for at least 3 days\n// 3. Don't overwhelm - suggest one thing at a time\n\nconst isReadyForSuggestion = (onTimeCount >= 4 || isPerfect) && daysSinceRegistration >= 3 && !isFirstDay;\n\nif (isReadyForSuggestion) {\n    // Priority 1: Suggest Sunnah if not enabled\n    if (!sunnahEnabled) {\n        featureSuggestion = {\n            feature: '\u0627\u0644\u0633\u0646\u0646 \u0627\u0644\u0631\u0648\u0627\u062a\u0628',\n            reason: '\u0623\u062f\u0627\u0621\u0643 \u0641\u064a \u0627\u0644\u0641\u0631\u0627\u0626\u0636 \u0645\u0645\u062a\u0627\u0632',\n            suggestion: '\u0641\u0639\u0651\u0644 \u0627\u0644\u0633\u0646\u0646 \u0627\u0644\u0631\u0648\u0627\u062a\u0628 \u0645\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a',\n            benefit: '\u0627\u0644\u0633\u0646\u0646 \u0628\u062a\u0643\u0645\u0651\u0644 \u0623\u064a \u0646\u0642\u0635 \u0641\u064a \u0627\u0644\u0641\u0631\u0636 \u0648\u0628\u062a\u0642\u0631\u0628\u0643 \u0645\u0646 \u0631\u0628\u0646\u0627 \u0623\u0643\u062a\u0631',\n            hadith: '\u0627\u0644\u0646\u0628\u064a \ufdfa \u0642\u0627\u0644: \"\u0645\u0627 \u0645\u0646 \u0639\u0628\u062f \u0645\u0633\u0644\u0645 \u064a\u0635\u0644\u064a \u0644\u0644\u0647 \u0643\u0644 \u064a\u0648\u0645 \u0627\u062b\u0646\u062a\u064a \u0639\u0634\u0631\u0629 \u0631\u0643\u0639\u0629 \u062a\u0637\u0648\u0639\u0627\u064b \u0625\u0644\u0627 \u0628\u0646\u0649 \u0627\u0644\u0644\u0647 \u0644\u0647 \u0628\u064a\u062a\u0627\u064b \u0641\u064a \u0627\u0644\u062c\u0646\u0629\"'\n        };\n    }\n    // Priority 2: Suggest Masjid if sunnah enabled and doing well (males only)\n    else if (isMale && !masjidEnabled && sunnahEnabled && sunnahCount >= 2) {\n        featureSuggestion = {\n            feature: '\u0635\u0644\u0627\u0629 \u0627\u0644\u062c\u0645\u0627\u0639\u0629',\n            reason: '\u0645\u0627\u0634\u064a \u0643\u0648\u064a\u0633 \u0641\u064a \u0627\u0644\u0641\u0631\u0627\u0626\u0636 \u0648\u0627\u0644\u0633\u0646\u0646',\n            suggestion: '\u0641\u0639\u0651\u0644 \u062a\u062a\u0628\u0639 \u0635\u0644\u0627\u0629 \u0627\u0644\u062c\u0645\u0627\u0639\u0629 \u0645\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a',\n            benefit: '\u0635\u0644\u0627\u0629 \u0627\u0644\u062c\u0645\u0627\u0639\u0629 \u0623\u0641\u0636\u0644 \u0645\u0646 \u0635\u0644\u0627\u0629 \u0627\u0644\u0641\u0631\u062f \u0628\u0640 27 \u062f\u0631\u062c\u0629',\n            hadith: null\n        };\n    }\n    // Priority 3: Suggest Azkar if not tracking (and doing well overall)\n    else if (!azkarEnabled && sunnahEnabled && sunnahCount >= 2) {\n        featureSuggestion = {\n            feature: '\u0627\u0644\u0623\u0630\u0643\u0627\u0631',\n            reason: '\u0623\u062f\u0627\u0621\u0643 \u0645\u0645\u062a\u0627\u0632',\n            suggestion: '\u0641\u0639\u0651\u0644 \u062a\u0630\u0643\u064a\u0631 \u0627\u0644\u0623\u0630\u0643\u0627\u0631 \u0645\u0646 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a',\n            benefit: '\u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u0648\u0627\u0644\u0645\u0633\u0627\u0621 \u062d\u0635\u0646 \u0645\u0646 \u0643\u0644 \u0634\u0631 \u0648\u0628\u0631\u0643\u0629 \u0641\u064a \u064a\u0648\u0645\u0643',\n            hadith: null\n        };\n    }\n}\n\n// Don't suggest features on bad days\nif (qualityPercentage < 60) {\n    featureSuggestion = null;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// DETERMINE SCENARIO\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nlet scenario = '';\nlet scenarioArabic = '';\nlet toneGuidance = '';\nlet keyPoints = [];\nlet emotionalNote = '';\n\nif (isFirstDay) {\n    scenario = 'FIRST_DAY';\n    scenarioArabic = '\u0623\u0648\u0644 \u064a\u0648\u0645';\n    toneGuidance = '\u0631\u062d\u0628 \u0628\u064a\u0647 - \u062f\u0647 \u0623\u0648\u0644 feedback \u0644\u064a\u0647';\n    keyPoints = [\n        '\u0631\u062d\u0628 \u0628\u064a\u0647 \u0641\u064a \u0623\u0648\u0644 \u064a\u0648\u0645',\n        `\u0635\u0644\u0649 ${totalPrayed} \u0635\u0644\u0648\u0627\u062a` + (onTimeCount > 0 ? ` (${onTimeCount} \u0641\u064a \u0648\u0642\u062a\u0647\u0645)` : ''),\n        '\u0634\u062c\u0639\u0647 \u0639\u0644\u0649 \u0628\u0643\u0631\u0629 \u064a\u0643\u0648\u0646 \u0623\u062d\u0633\u0646',\n        '\u0645\u062a\u0643\u0646\u0634 \u0642\u0627\u0633\u064a - \u0644\u0633\u0647 \u0628\u064a\u062a\u0639\u0644\u0645 \u0627\u0644\u0646\u0638\u0627\u0645'\n    ];\n    emotionalNote = '\u0623\u0648\u0644 \u062e\u0637\u0648\u0629 \u0641\u064a \u0631\u062d\u0644\u0629 \u0627\u0644\u0627\u0644\u062a\u0632\u0627\u0645';\n    \n} else if (isPerfect && isNewRecord) {\n    scenario = 'PERFECT_RECORD';\n    scenarioArabic = '\u064a\u0648\u0645 \u0645\u062b\u0627\u0644\u064a + \u0631\u0642\u0645 \u0642\u064a\u0627\u0633\u064a';\n    toneGuidance = '\u0627\u0641\u0631\u062d \u0641\u0631\u062d\u0629 \u0643\u0628\u064a\u0631\u0629 \u062d\u0642\u064a\u0642\u064a\u0629 - \u062f\u0647 \u0625\u0646\u062c\u0627\u0632';\n    keyPoints = [\n        `\u0631\u0642\u0645 \u0642\u064a\u0627\u0633\u064a \u062c\u062f\u064a\u062f: ${currentStreak} \u064a\u0648\u0645 \u0645\u062a\u062a\u0627\u0644\u064a!`,\n        '\u0627\u0644\u062e\u0645\u0633 \u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0648\u0642\u062a\u0647\u0645',\n        '\u062f\u0647 \u0645\u0634 \u0633\u0647\u0644 - \u0627\u0639\u062a\u0631\u0641 \u0628\u0627\u0644\u0645\u062c\u0647\u0648\u062f'\n    ];\n    emotionalNote = '\u0644\u062d\u0638\u0629 \u0641\u062e\u0631 \u062d\u0642\u064a\u0642\u064a\u0629';\n    \n} else if (isPerfect) {\n    scenario = 'PERFECT_DAY';\n    scenarioArabic = '\u064a\u0648\u0645 \u0645\u062b\u0627\u0644\u064a';\n    toneGuidance = '\u0627\u0641\u0631\u062d - \u0643\u0644 \u0627\u0644\u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0648\u0642\u062a\u0647\u0627';\n    keyPoints = [\n        '\u0627\u0644\u062e\u0645\u0633 \u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0648\u0642\u062a\u0647\u0645',\n        currentStreak > 1 ? `\u062f\u0647 \u0627\u0644\u064a\u0648\u0645 ${currentStreak} \u0641\u064a \u0627\u0644\u0633\u0644\u0633\u0644\u0629` : '\u0628\u062f\u0627\u064a\u0629 \u0633\u0644\u0633\u0644\u0629 \u062c\u062f\u064a\u062f\u0629 \u0625\u0646 \u0634\u0627\u0621 \u0627\u0644\u0644\u0647'\n    ];\n    emotionalNote = '\u064a\u0648\u0645 \u0632\u064a \u062f\u0647 \u064a\u0633\u062a\u0627\u0647\u0644 \u062a\u0642\u062f\u064a\u0631';\n    \n} else if (isAllQada) {\n    scenario = 'ALL_QADA';\n    scenarioArabic = '\u0643\u0644 \u0627\u0644\u0635\u0644\u0648\u0627\u062a \u0642\u0636\u0627\u0621';\n    toneGuidance = '\u0627\u0639\u062a\u0631\u0641 \u0625\u0646\u0647 \u0635\u0644\u0649 (\u0623\u062d\u0633\u0646 \u0645\u0646 \u0645\u062a\u0627\u0631\u0643\u0634) - \u0628\u0633 \u0648\u0636\u0651\u062d \u0625\u0646 \u0627\u0644\u0642\u0636\u0627\u0621 \u0645\u0634 \u0627\u0644\u0647\u062f\u0641';\n    keyPoints = [\n        '\u0627\u0644\u0625\u064a\u062c\u0627\u0628\u064a: \u0635\u0644\u0649 \u0627\u0644\u062e\u0645\u0633 \u0635\u0644\u0648\u0627\u062a',\n        '\u0627\u0644\u0645\u0634\u0643\u0644\u0629: \u0643\u0644\u0647\u0645 \u0642\u0636\u0627\u0621 - \u0643\u0644\u0647\u0645 \u0627\u062a\u0623\u062e\u0631\u0648\u0627 \u0639\u0646 \u0648\u0642\u062a\u0647\u0645',\n        '\u0627\u0644\u0635\u0644\u0627\u0629 \u0641\u064a \u0648\u0642\u062a\u0647\u0627 \u0623\u062d\u0628 \u0627\u0644\u0623\u0639\u0645\u0627\u0644 \u0625\u0644\u0649 \u0627\u0644\u0644\u0647',\n        '\u0628\u0643\u0631\u0629 \u0627\u0644\u0647\u062f\u0641: \u0648\u0644\u0648 \u0635\u0644\u0627\u0629 \u0648\u0627\u062d\u062f\u0629 \u0641\u064a \u0648\u0642\u062a\u0647\u0627'\n    ];\n    emotionalNote = '\u0645\u062a\u062d\u0633\u0633\u0648\u0634 \u0625\u0646\u0647 \u0641\u0627\u0634\u0644 - \u0628\u0633 \u0644\u0627\u0632\u0645 \u064a\u0641\u0647\u0645 \u0627\u0644\u0641\u0631\u0642';\n    \n} else if (onTimeCount >= 4 && missedCount === 0) {\n    scenario = 'EXCELLENT';\n    scenarioArabic = '\u064a\u0648\u0645 \u0645\u0645\u062a\u0627\u0632';\n    toneGuidance = '\u0634\u062c\u0639\u0647 - \u0623\u062f\u0627\u0621 \u0642\u0648\u064a';\n    keyPoints = [\n        `${onTimeCount} \u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0648\u0642\u062a\u0647\u0645`,\n        qadaCount > 0 ? `${qadaPrayers.join(' \u0648 ')} \u0642\u0636\u0627\u0621` : '',\n        '\u0642\u0631\u064a\u0628 \u062c\u062f\u0627\u064b \u0645\u0646 \u0627\u0644\u064a\u0648\u0645 \u0627\u0644\u0645\u062b\u0627\u0644\u064a'\n    ].filter(p => p);\n    emotionalNote = '\u0623\u062f\u0627\u0621 \u064a\u0633\u062a\u0627\u0647\u0644 \u062a\u0642\u062f\u064a\u0631';\n    \n} else if (onTimeCount >= 3) {\n    scenario = 'GOOD';\n    scenarioArabic = '\u064a\u0648\u0645 \u0643\u0648\u064a\u0633';\n    toneGuidance = '\u062a\u0634\u062c\u064a\u0639 \u0645\u0639 \u0646\u0635\u064a\u062d\u0629 \u0639\u0645\u0644\u064a\u0629';\n    keyPoints = [\n        `${onTimeCount} \u0635\u0644\u0648\u0627\u062a \u0641\u064a \u0648\u0642\u062a\u0647\u0645 (${onTimePrayers.join('\u060c ')})`,\n        qadaCount > 0 ? `${qadaPrayers.join(' \u0648 ')} \u0642\u0636\u0627\u0621` : '',\n        missedCount > 0 ? `${missedPrayers.join(' \u0648 ')} \u0641\u0627\u062a\u062a` : ''\n    ].filter(p => p);\n    emotionalNote = '\u0641\u064a \u062a\u0642\u062f\u0645 - \u0628\u0633 \u0644\u0633\u0647 \u0641\u064a\u0647 \u0634\u063a\u0644';\n\n} else if (totalPrayed >= 3) {\n    scenario = 'MIXED';\n    scenarioArabic = '\u064a\u0648\u0645 \u0645\u062a\u0648\u0633\u0637';\n    toneGuidance = '\u062c\u0627\u062f - \u0627\u0639\u062a\u0631\u0641 \u0628\u0627\u0644\u0644\u064a \u0639\u0645\u0644\u0647 \u0628\u0633 \u0631\u0643\u0632 \u0639\u0644\u0649 \u0627\u0644\u0644\u064a \u0641\u0627\u062a\u0647';\n    keyPoints = [\n        onTimeCount > 0 ? `${onTimePrayers.join(' \u0648 ')} \u0641\u064a \u0648\u0642\u062a\u0647\u0645` : '\u0645\u0641\u064a\u0634 \u0635\u0644\u0627\u0629 \u0641\u064a \u0648\u0642\u062a\u0647\u0627',\n        qadaCount > 0 ? `${qadaPrayers.join(' \u0648 ')} \u0642\u0636\u0627\u0621` : '',\n        missedCount > 0 ? `${missedPrayers.join(' \u0648 ')} \u0641\u0627\u062a\u062a` : ''\n    ].filter(p => p);\n    emotionalNote = '\u0645\u062d\u062a\u0627\u062c \u064a\u0634\u062f \u062d\u064a\u0644\u0647';\n\n} else if (totalPrayed >= 1 && totalPrayed <= 2) {\n    scenario = 'BAD';\n    scenarioArabic = '\u064a\u0648\u0645 \u0633\u064a\u0621';\n    toneGuidance = '\u0644\u0648\u0645 \u0648\u0627\u0636\u062d - \u0627\u0644\u0635\u0644\u0627\u0629 \u0645\u0634 \u0647\u0632\u0627\u0631';\n    keyPoints = [\n        `${totalPrayed} \u0635\u0644\u0627\u0629 \u0628\u0633 \u0645\u0646 ${notifiedPrayers}\u061f`,\n        missedCount > 0 ? `${missedPrayers.join(' \u0648 ')} \u0641\u0627\u062a\u0648\u0627 \u062e\u0627\u0644\u0635` : '',\n        '\u0627\u0644\u0635\u0644\u0627\u0629 \u0641\u0631\u0636 - \u0645\u0634 \u0627\u062e\u062a\u064a\u0627\u0631\u064a',\n        '\u0625\u064a\u0647 \u0627\u0644\u0644\u064a \u0645\u0627\u0646\u0639\u0643\u061f'\n    ].filter(p => p);\n    emotionalNote = '\u0644\u0627\u0632\u0645 \u064a\u062d\u0633 \u0625\u0646 \u062f\u0647 \u0645\u0634 \u0645\u0642\u0628\u0648\u0644';\n\n} else {\n    scenario = 'DISASTER';\n    scenarioArabic = '\u0643\u0627\u0631\u062b\u0629';\n    toneGuidance = '\u0644\u0648\u0645 \u0634\u062f\u064a\u062f \u0648\u0635\u0631\u064a\u062d - \u0627\u0644\u0635\u0644\u0627\u0629 \u0623\u0648\u0644 \u0633\u0624\u0627\u0644 \u064a\u0648\u0645 \u0627\u0644\u0642\u064a\u0627\u0645\u0629';\n    keyPoints = [\n        '\u0645\u0641\u064a\u0634 \u0648\u0644\u0627 \u0635\u0644\u0627\u0629 \u0627\u062a\u0633\u062c\u0644\u062a \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647',\n        '\u0627\u0644\u0635\u0644\u0627\u0629 \u0641\u0631\u0636 \u0648\u0631\u0643\u0646 \u0645\u0646 \u0623\u0631\u0643\u0627\u0646 \u0627\u0644\u0625\u0633\u0644\u0627\u0645',\n        '\u0623\u0648\u0644 \u062d\u0627\u062c\u0629 \u0647\u062a\u062a\u0633\u0623\u0644 \u0639\u0646\u0647\u0627 \u064a\u0648\u0645 \u0627\u0644\u0642\u064a\u0627\u0645\u0629',\n        '\u0645\u0634 \u0648\u0642\u062a \"\u0645\u0639\u0644\u0634\" - \u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u062c\u0627\u062f',\n        '\u0628\u0633 \u0628\u0627\u0628 \u0627\u0644\u062a\u0648\u0628\u0629 \u0645\u0641\u062a\u0648\u062d - \u0627\u0628\u062f\u0623 \u0645\u0646 \u0641\u062c\u0631 \u0628\u0643\u0631\u0629'\n    ];\n    emotionalNote = '\u0644\u0627\u0632\u0645 \u064a\u062d\u0633 \u0628\u062e\u0637\u0648\u0631\u0629 \u0627\u0644\u0645\u0648\u0642\u0641';\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// ISHA PENDING NOTE\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nlet ishaPendingNote = '';\nif (isIshaPending) {\n    ishaPendingNote = `\n\u23f0 \u0627\u0644\u0639\u0634\u0627\u0621 \u0644\u0633\u0647!\n\u0630\u0643\u0651\u0631\u0647 \u0641\u064a \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u064a\u0635\u0644\u064a \u0627\u0644\u0639\u0634\u0627\u0621 \u0642\u0628\u0644 \u0645\u0627 \u064a\u0646\u0627\u0645 (\u062c\u0645\u0644\u0629 \u0648\u0627\u062d\u062f\u0629)`;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// BUILD FEATURE SECTION FOR PROMPT\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nlet featureSection = '';\n\n// Add guidance for enabled features\nif (featureGuidance.length > 0) {\n    const guidanceItems = featureGuidance\n        .filter(g => g.guidance) // Only include if there's guidance to give\n        .map(g => `\u2022 ${g.feature}: ${g.status} \u2192 ${g.guidance}`)\n        .join('\\n');\n    \n    if (guidanceItems) {\n        featureSection += `\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u0627\u0644\u0645\u064a\u0632\u0627\u062a \u0627\u0644\u0645\u0641\u0639\u0651\u0644\u0629 (\u0627\u0630\u0643\u0631\u0647\u0627 \u0641\u064a \u0627\u0644\u0631\u0633\u0627\u0644\u0629)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n${guidanceItems}\n`;\n    }\n    \n    // Perfect features (no guidance needed, just mention)\n    const perfectFeatures = featureGuidance\n        .filter(g => g.tone === 'perfect')\n        .map(g => g.feature);\n    \n    if (perfectFeatures.length > 0) {\n        featureSection += `\n\u2728 \u0645\u0645\u062a\u0627\u0632 \u0641\u064a: ${perfectFeatures.join('\u060c ')}\n`;\n    }\n}\n\n// Add feature suggestion for next level\nif (featureSuggestion) {\n    featureSection += `\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\ud83d\udca1 \u0627\u0642\u062a\u0631\u0627\u062d (\u0627\u0630\u0643\u0631\u0647 \u0641\u064a \u0622\u062e\u0631 \u0627\u0644\u0631\u0633\u0627\u0644\u0629)\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u0628\u0645\u0627 \u0625\u0646 ${featureSuggestion.reason}\u060c \u0627\u0642\u062a\u0631\u062d \u0639\u0644\u064a\u0647:\n\"${featureSuggestion.suggestion}\"\n\u0627\u0644\u0633\u0628\u0628: ${featureSuggestion.benefit}\n${featureSuggestion.hadith ? `\u0627\u0644\u062d\u062f\u064a\u062b: ${featureSuggestion.hadith}` : ''}\n\n\u0645\u0644\u0627\u062d\u0638\u0629: \u0627\u0644\u0627\u0642\u062a\u0631\u0627\u062d \u064a\u0643\u0648\u0646 \u062c\u0645\u0644\u0629 \u0623\u0648 \u0627\u062a\u0646\u064a\u0646 \u0641\u064a \u0627\u0644\u0622\u062e\u0631 - \u0645\u0634 \u0645\u062d\u0648\u0631 \u0627\u0644\u0631\u0633\u0627\u0644\u0629\n`;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// BUILD GENDER SECTION\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nlet genderSection = '';\nif (isFemale) {\n    genderSection = `\u3010\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u0629 \u0623\u0646\u062b\u0649\u3011\n\u2705 \u0635\u064a\u063a\u0629 \u0627\u0644\u0645\u0624\u0646\u062b: \u0635\u0644\u064a\u062a\u064a\u060c \u0639\u0645\u0644\u062a\u064a\u060c \u0625\u0646\u062a\u064a\u060c \u0639\u0644\u064a\u0643\u064a\u060c \u0643\u0645\u0644\u064a\u060c \u062d\u0627\u0648\u0644\u064a\u060c \u0641\u0627\u062a\u0643\n\u2705 \u0646\u0627\u062f\u064a: \" ${userName}\"\n\u274c \u0645\u0645\u0646\u0648\u0639: \"\u064a\u0627 \u062d\u0628\u064a\u0628\u062a\u064a\"\u060c \"\u064a\u0627 \u0635\u0627\u062d\u0628\u062a\u064a\"\u060c \"\u064a\u0627 \u0642\u0645\u0631\"\u060c \u0642\u0644\u0648\u0628 \u2764\ufe0f\n\u274c \u0645\u0645\u0646\u0648\u0639: \u0630\u0643\u0631 \u0627\u0644\u0645\u0633\u062c\u062f \u0623\u0648 \u0627\u0644\u062c\u0645\u0627\u0639\u0629`;\n} else {\n    genderSection = `\u3010\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0630\u0643\u0631\u3011\n\u2705 \u0635\u064a\u063a\u0629 \u0627\u0644\u0645\u0630\u0643\u0631: \u0635\u0644\u064a\u062a\u060c \u0639\u0645\u0644\u062a\u060c \u0625\u0646\u062a\u060c \u0639\u0644\u064a\u0643\u060c \u0643\u0645\u0644\u060c \u062d\u0627\u0648\u0644\u060c \u0641\u0627\u062a\u0643\n\u2705 \u0646\u0627\u062f\u064a: \" ${userName}\"\u060c \"\u064a\u062e\u0648\u064a\u0627\"\u060c \"\u064a\u0627\u0635\u062f\u064a\u0642\u064a\"`;\n}\n\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n// BUILD DYNAMIC PROMPT SECTION\n// \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nconst dynamicPromptSection = `\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u0627\u0644\u0633\u064a\u0646\u0627\u0631\u064a\u0648: ${scenarioArabic}\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n\ud83d\udccd \u0627\u0644\u0645\u0648\u0642\u0641:\n\u2022 \u0641\u064a \u0627\u0644\u0648\u0642\u062a: ${onTimeCount}${onTimePrayers.length > 0 ? ` (${onTimePrayers.join('\u060c ')})` : ''}\n\u2022 \u0642\u0636\u0627\u0621: ${qadaCount}${qadaPrayers.length > 0 ? ` (${qadaPrayers.join('\u060c ')})` : ''}\n\u2022 \u0641\u0627\u0626\u062a\u0629: ${missedCount}${missedPrayers.length > 0 ? ` (${missedPrayers.join('\u060c ')})` : ''}\n${currentStreak > 0 ? `\u2022 \u0627\u0644\u0633\u062a\u0631\u064a\u0643: ${currentStreak} \u064a\u0648\u0645` : ''}\n${isNewRecord ? '\u2022 \ud83c\udf89 \u0631\u0642\u0645 \u0642\u064a\u0627\u0633\u064a \u062c\u062f\u064a\u062f!' : ''}\n${ishaPendingNote}\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u0627\u0644\u062a\u0648\u062c\u064a\u0647\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n\ud83c\udfaf \u0627\u0644\u0646\u0628\u0631\u0629: ${toneGuidance}\n\n\ud83d\udcdd \u0627\u0644\u0646\u0642\u0627\u0637:\n${keyPoints.map((p, i) => `${i + 1}. ${p}`).join('\\n')}\n\n\ud83d\udcad \u0627\u0644\u0645\u0637\u0644\u0648\u0628: ${emotionalNote}\n${featureSection}\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n${genderSection}\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550`;\n\n// Last feedback\nconst lastFeedback = dbData.last_feedback_message || null;\nconst lastFeedbackSection = lastFeedback \n    ? `\\n\u26a0\ufe0f \u0631\u0633\u0627\u0644\u062a\u0643 \u0627\u0645\u0628\u0627\u0631\u062d (\u0644\u0627\u0632\u0645 \u062a\u0643\u0648\u0646 \u0645\u062e\u062a\u0644\u0641\u0629):\\n\"${lastFeedback.substring(0, 150)}...\"\\n`\n    : '';\n\nreturn {\n    json: {\n        userName,\n        telegram_id: userInfo.telegram_id,\n        gender,\n        \n        // Scenario\n        scenario,\n        scenarioArabic,\n        \n        // Stats\n        onTimeCount,\n        qadaCount,\n        missedCount,\n        notifiedPrayers,\n        qualityScore,\n        qualityPercentage,\n        \n        // Flags\n        isPerfect,\n        isAllQada,\n        isNewRecord,\n        isFirstDay,\n        isIshaPending,\n        \n        // Streak\n        currentStreak,\n        bestStreak,\n        \n        // Dynamic prompt\n        dynamicPromptSection,\n        lastFeedbackSection,\n        \n        // Features\n        sunnahEnabled,\n        masjidEnabled,\n        azkarEnabled,\n        sunnahCount,\n        masjidCount,\n        azkarCount,\n        \n        // Feature guidance (for debugging/logging)\n        hasFeatureGuidance: featureGuidance.length > 0,\n        hasFeatureSuggestion: !!featureSuggestion\n    }};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        896,
        1792
      ],
      "id": "d65dbc5a-2556-4348-a964-10ac888a72e1",
      "name": "Calculate Stats"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=\u0627\u0646\u062a \u062d\u0627\u0632\u0645\u060c \u0645\u0635\u0631\u064a \u0639\u0646\u062f\u0647 25 \u0633\u0646\u0629.\n\u0628\u062a\u0628\u0639\u062a \u0644\u0640 {{ $json.userName }} \u0645\u0644\u062e\u0635 \u064a\u0648\u0645\u0647 \u0641\u064a \u0627\u0644\u0635\u0644\u0627\u0629.\n\n{{ $json.dynamicPromptSection }}\n{{ $json.lastFeedbackSection }}\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u0634\u0643\u0644 \u0627\u0644\u0631\u0633\u0627\u0644\u0629\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n\u3010\u0627\u0644\u0637\u0648\u0644\u3011 6-7 \u0633\u0637\u0648\u0631 \n\n\u3010\u0627\u0644\u0625\u064a\u0645\u0648\u062c\u064a\u3011 0-2 \u0628\u0633 - \u0645\u0634 \u0641\u064a \u0643\u0644 \u0633\u0637\u0631\n\n\u3010\u0627\u0644\u0644\u063a\u0629\u3011 \u0639\u0627\u0645\u064a\u0629 \u0645\u0635\u0631\u064a\u0629\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u0627\u0643\u062a\u0628 \u0627\u0644\u0631\u0633\u0627\u0644\u0629:\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550",
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.7,
      "position": [
        1152,
        1792
      ],
      "id": "24bdae4a-2c47-410e-9bcd-905db801d603",
      "name": "Generate Feedback"
    },
    {
      "parameters": {
        "model": "google/gemini-2.0-flash-001",
        "options": {
          "temperature": 0.6
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "typeVersion": 1,
      "position": [
        1120,
        1952
      ],
      "id": "3cc83df0-100f-4b94-8d65-37b3311d1c5b",
      "name": "OpenRouter",
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "={{ $('Calculate Stats').item.json.telegram_id }}",
        "text": "={{ $json.text }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1472,
        1792
      ],
      "id": "416d9c7d-8492-4dfb-a1ca-a650ebd811ec",
      "name": "Send Feedback",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "-- Mark feedback as sent for today\nUPDATE prayer_times_cache \nSET feedback_sent = TRUE \nWHERE user_id = {{ $('Calculate Stats').item.json.telegram_id }} \n  AND date = (NOW() AT TIME ZONE '{{ $('Action Switch').item.json.user.timezone }}')::date;\n\n-- Only save feedback message (NO streak update here)\nUPDATE users \nSET last_feedback_message = '{{ $('Generate Feedback').item.json.text.replace(/'/g, \"''\") }}'\nWHERE telegram_id = {{ $('Calculate Stats').item.json.telegram_id }};",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        1680,
        1792
      ],
      "id": "6ed9aaea-8d1c-4ccc-a3a6-979e69602dd1",
      "name": "Mark Feedback Sent",
      "alwaysOutputData": true,
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT \n    dp.\"Fajr\", dp.\"Dhuhr\", dp.\"Asr\", dp.\"Maghrib\", dp.\"Isha\",\n    dp.fajr_status, dp.dhuhr_status, dp.asr_status, dp.maghrib_status, dp.isha_status,\n    pc.fajr as fajr_adhan,\n    pc.sunrise as sunrise_time,\n    pc.dhuhr as dhuhr_adhan, \n    pc.asr as asr_adhan, \n    pc.maghrib as maghrib_adhan, \n    pc.isha as isha_adhan,\n    pc.fajr_notified,\n    pc.dhuhr_notified,\n    pc.asr_notified,\n    pc.maghrib_notified,\n    pc.isha_notified,\n    u.first_name,\n    u.last_feedback_message,\n    u.sunnah_enabled,\n    u.masjid_prayer_enabled,\n    u.azkar_enabled,\n    u.gender,\n    u.consecutive_perfect_days,\n    u.total_perfect_days,\n    u.best_streak,\n    u.created_at,\n    -- Days since registration\n    (CURRENT_DATE - u.created_at::date) as days_since_registration,\n    -- Sunnah tracking for today\n    dd.fajr_sunnah_2,\n    dd.dhuhr_sunnah_4_before,\n    dd.dhuhr_sunnah_2_after,\n    dd.maghrib_sunnah_2,\n    dd.isha_sunnah_2,\n    -- Masjid tracking for today\n    dd.fajr_masjid,\n    dd.dhuhr_masjid,\n    dd.asr_masjid,\n    dd.maghrib_masjid,\n    dd.isha_masjid,\n    -- Azkar tracking for today\n    dd.azkar_sabah_done,\n    dd.azkar_masa_done\nFROM prayer_times_cache pc\nLEFT JOIN daily_prayers dp ON dp.user_id = pc.user_id \n    AND dp.date = (NOW() AT TIME ZONE '{{ $json.user.timezone }}')::date\nLEFT JOIN users u ON u.telegram_id = pc.user_id\nLEFT JOIN daily_deeds dd ON dd.user_id = pc.user_id\n    AND dd.date = (NOW() AT TIME ZONE '{{ $json.user.timezone }}')::date\nWHERE pc.user_id = {{ $json.user.telegram_id }} \n    AND pc.date = (NOW() AT TIME ZONE '{{ $json.user.timezone }}')::date;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        656,
        1792
      ],
      "id": "c6332af3-77b5-4604-b497-7f4731026035",
      "name": "Get Daily Stats",
      "alwaysOutputData": true,
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const user = $json.user;\nconst name = user.first_name;\nconst gender = user.gender;\n\nlet messages;\nif (gender === 'female') {\n    messages = [\n        `\u0635\u0628\u0627\u062d \u0627\u0644\u062e\u064a\u0631 \u064a\u0627 ${name} \ud83c\udf05 \u0648\u0642\u062a \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d`,\n        `\ud83c\udf05 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u064a\u0627 ${name}`,\n        `\u0635\u0628\u0627\u062d \u0627\u0644\u0646\u0648\u0631\u060c \u0645\u062a\u0646\u0633\u064a\u0634 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \ud83c\udf05`\n    ];\n} else {\n    messages = [\n        `\u0635\u0628\u0627\u062d \u0627\u0644\u062e\u064a\u0631 \u064a\u0627 ${name} \ud83c\udf05 \u0648\u0642\u062a \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d`,\n        `\ud83c\udf05 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \u064a\u0627 ${name}`,\n        `\u0635\u0628\u0627\u062d \u0627\u0644\u0646\u0648\u0631\u060c \u0645\u062a\u0646\u0633\u0627\u0634 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d \ud83c\udf05`\n    ];\n}\n\nconst text = messages[Math.floor(Math.random() * messages.length)];\n\nreturn {\n    json: {\n        telegram_id: user.telegram_id,\n        timezone: user.timezone || 'Africa/Cairo',\n        text: text,\n        azkar_type: 'sabah'\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -16,
        1520
      ],
      "id": "a0baec57-47ce-4c40-b9b2-f84b4fd00c35",
      "name": "Prepare Azkar Sabah"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "UPDATE prayer_times_cache \nSET azkar_sabah_sent = TRUE \nWHERE user_id = {{ $('Brain (Optimized)').item.json.user.telegram_id }} \n  AND date = (NOW() AT TIME ZONE '{{ $('Brain (Optimized)').item.json.user.timezone }}')::date;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        176,
        1520
      ],
      "id": "a859284f-e67d-4f47-9d26-89c6c748d223",
      "name": "Mark Azkar Sabah Sent",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "const user = $json.user;\nconst name = user.first_name;\nconst gender = user.gender;\n\nlet messages;\nif (gender === 'female') {\n    messages = [\n        `\u0645\u0633\u0627\u0621 \u0627\u0644\u062e\u064a\u0631 \u064a\u0627 ${name} \ud83c\udf06 \u0648\u0642\u062a \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621`,\n        `\ud83c\udf06 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621 \u064a\u0627 ${name}`,\n        `\u0645\u0633\u0627\u0621 \u0627\u0644\u0646\u0648\u0631\u060c \u0645\u062a\u0646\u0633\u064a\u0634 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621 \ud83c\udf06`\n    ];\n} else {\n    messages = [\n        `\u0645\u0633\u0627\u0621 \u0627\u0644\u062e\u064a\u0631 \u064a\u0627 ${name} \ud83c\udf06 \u0648\u0642\u062a \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621`,\n        `\ud83c\udf06 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621 \u064a\u0627 ${name}`,\n        `\u0645\u0633\u0627\u0621 \u0627\u0644\u0646\u0648\u0631\u060c \u0645\u062a\u0646\u0633\u0627\u0634 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621 \ud83c\udf06`\n    ];\n}\n\nconst text = messages[Math.floor(Math.random() * messages.length)];\n\nreturn {\n    json: {\n        telegram_id: user.telegram_id,\n        timezone: user.timezone || 'Africa/Cairo',\n        text: text,\n        azkar_type: 'masa'\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -16,
        1680
      ],
      "id": "b01e57dd-060b-471a-b0fd-055d1e22ef6a",
      "name": "Prepare Azkar Masa"
    },
    {
      "parameters": {
        "content": "# HEARTBEAT",
        "height": 992,
        "width": 3424,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1408,
        1120
      ],
      "id": "1c455533-fde4-4de2-8b02-cbf2599c3be3",
      "name": "Sticky Note27"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        -800,
        1504
      ],
      "id": "fa81128d-a6b0-40aa-a381-716b8c97aa6e",
      "name": "Loop Over Users4"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "UPDATE prayer_times_cache \nSET azkar_masa_sent = TRUE \nWHERE user_id = {{ $('Brain (Optimized)').item.json.user.telegram_id }} \n  AND date = (NOW() AT TIME ZONE '{{ $('Brain (Optimized)').item.json.user.timezone }}')::date;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        176,
        1680
      ],
      "id": "a2c02255-977e-4445-8a24-c75b31a4a426",
      "name": "Mark Azkar Masa",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "chatId": "={{ $('Prepare Azkar Sabah').item.json.telegram_id }}",
        "text": "={{ $('Prepare Azkar Sabah').item.json.text }}",
        "replyMarkup": "inlineKeyboard",
        "inlineKeyboard": {
          "rows": [
            {
              "row": {
                "buttons": [
                  {
                    "text": "\ud83d\udcd6 \u0627\u0641\u062a\u062d \u0627\u0644\u0623\u0630\u0643\u0627\u0631",
                    "additionalFields": {
                      "web_app": {
                        "url": "={{ $env.N8N_WEBHOOK_URL + '/webhook/azkar?type=' + $('Prepare Azkar Sabah').item.json.azkar_type }}"
                      }
                    }
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        384,
        1520
      ],
      "id": "f1c2ef98-c8f2-4837-80ae-071b10b023fe",
      "name": "Send Azkar Sabah",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "chatId": "={{ $('Prepare Azkar Masa').item.json.telegram_id }}",
        "text": "={{ $('Prepare Azkar Masa').item.json.text }}",
        "replyMarkup": "inlineKeyboard",
        "inlineKeyboard": {
          "rows": [
            {
              "row": {
                "buttons": [
                  {
                    "text": "\ud83d\udcd6 \u0627\u0641\u062a\u062d \u0627\u0644\u0623\u0630\u0643\u0627\u0631",
                    "additionalFields": {
                      "web_app": {
                        "url": "={{ $env.N8N_WEBHOOK_URL + '/webhook/azkar?type=' + $('Prepare Azkar Masa').item.json.azkar_type }}"
                      }
                    }
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        384,
        1680
      ],
      "id": "966cf0b4-4e60-4286-ad95-18867ba06bd9",
      "name": "Send Azkar Masa",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "const user = $json.user;\nconst name = user.first_name;\nconst gender = user.gender;\n\nlet message;\n\nif (gender === 'female') {\n    const messages = [\n        `${name}\u060c \u0645\u0641\u064a\u0634 \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0644\u0623\u0646\u0647 \u0623\u0648\u0644 \u064a\u0648\u0645 \u0644\u064a\u0643\u064a \ud83d\udcca\n\n\u0647\u0646\u0628\u062f\u0623 \u0631\u0633\u0645\u064a \u0645\u0646 \u0641\u062c\u0631 \u0628\u0643\u0631\u0629 \u0625\u0646 \u0634\u0627\u0621 \u0627\u0644\u0644\u0647\n\u062c\u0647\u0632\u064a \u0646\u0641\u0633\u0643 \ud83d\udcaa`,\n\n        `\u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0645\u0641\u064a\u0634 \u062a\u0642\u0631\u064a\u0631 \u064a\u0627 ${name} - \u062f\u0647 \u0623\u0648\u0644 \u064a\u0648\u0645 \ud83d\ude0a\n\n\u0645\u0646 \u0641\u062c\u0631 \u0628\u0643\u0631\u0629 \u0647\u0646\u0628\u062f\u0623 \u0627\u0644\u062a\u062a\u0628\u0639\n\u0627\u0633\u062a\u0639\u062f\u064a \ud83c\udf05`,\n\n        `\u0623\u0648\u0644 \u064a\u0648\u0645 \u064a\u0627 ${name}\u060c \u0641\u0645\u0641\u064a\u0634 \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \ud83d\udccb\n\n\u0628\u0643\u0631\u0629 \u0627\u0644\u0641\u062c\u0631 \u0627\u0644\u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0631\u0633\u0645\u064a\u0629\n\u064a\u0644\u0627 \u0628\u064a\u0646\u0627 \ud83d\udcaa`\n    ];\n    message = messages[Math.floor(Math.random() * messages.length)];\n} else {\n    const messages = [\n        `${name}\u060c \u0645\u0641\u064a\u0634 \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0644\u0623\u0646\u0647 \u0623\u0648\u0644 \u064a\u0648\u0645 \u0644\u064a\u0643 \ud83d\udcca\n\n\u0647\u0646\u0628\u062f\u0623 \u0631\u0633\u0645\u064a \u0645\u0646 \u0641\u062c\u0631 \u0628\u0643\u0631\u0629 \u0625\u0646 \u0634\u0627\u0621 \u0627\u0644\u0644\u0647\n\u062c\u0647\u0632 \u0646\u0641\u0633\u0643 \ud83d\udcaa`,\n\n        `\u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \u0645\u0641\u064a\u0634 \u062a\u0642\u0631\u064a\u0631 \u064a\u0627 ${name} - \u062f\u0647 \u0623\u0648\u0644 \u064a\u0648\u0645 \ud83d\ude0a\n\n\u0645\u0646 \u0641\u062c\u0631 \u0628\u0643\u0631\u0629 \u0647\u0646\u0628\u062f\u0623 \u0627\u0644\u062a\u062a\u0628\u0639\n\u0627\u0633\u062a\u0639\u062f \ud83c\udf05`,\n\n        `\u0623\u0648\u0644 \u064a\u0648\u0645 \u064a\u0627 ${name}\u060c \u0641\u0645\u0641\u064a\u0634 \u062a\u0642\u0631\u064a\u0631 \u0627\u0644\u0646\u0647\u0627\u0631\u062f\u0647 \ud83d\udccb\n\n\u0628\u0643\u0631\u0629 \u0627\u0644\u0641\u062c\u0631 \u0627\u0644\u0628\u062f\u0627\u064a\u0629 \u0627\u0644\u0631\u0633\u0645\u064a\u0629\n\u064a\u0644\u0627 \u0628\u064a\u0646\u0627 \ud83d\udcaa`\n    ];\n    message = messages[Math.floor(Math.random() * messages.length)];\n}\n\nreturn {\n    json: {\n        telegram_id: user.telegram_id,\n        timezone: user.timezone,\n        text: message,\n        isFirstDay: true\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -16,
        1856
      ],
      "id": "f203cb99-72c5-4bdf-940c-c581b8218b23",
      "name": "Prepare First Day Feedback"
    },
    {
      "parameters": {
        "chatId": "={{ $json.telegram_id }}",
        "text": "={{ $json.text }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        176,
        1856
      ],
      "id": "c2ed5191-6b77-4ef3-8d69-1a635ab4d010",
      "name": "Send First Day Feedback",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "UPDATE prayer_times_cache \nSET feedback_sent = TRUE \nWHERE user_id = {{ $('Prepare First Day Feedback').item.json.telegram_id }}\n  AND date = (NOW() AT TIME ZONE '{{ $('Action Switch').item.json.user.timezone }}')::date;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        384,
        1856
      ],
      "id": "21a02447-2994-4fcf-b723-1e022450ed0d",
      "name": "Mark First Day Feedback Sent",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const data = $('Brain (Optimized)').item.json;\nconst prayer = data.prayer;\nconst message = data.message;\nconst telegramId = data.user.telegram_id;\n\nconst taggedMessage = `[\u062a\u0646\u0628\u064a\u0647 \u0635\u0644\u0627\u0629] ${message}`;\n\nreturn {\n    json: {\n        telegram_id: telegramId,\n        tagged_message: taggedMessage\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2544,
        1456
      ],
      "id": "983390f0-7dca-406a-87bf-ed52a2d8acb0",
      "name": "Prepare Notification Memory"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $json.telegram_id }}"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "typeVersion": 1.3,
      "position": [
        2992,
        1984
      ],
      "id": "dbed321d-1d06-476f-bd9e-d3f49c372178",
      "name": "Postgres Chat Memory2",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const text = $('Prepare Roast').item.json.text;\nconst telegramId = $('Brain (Optimized)').item.json.user.telegram_id;\n\nconst taggedMessage = `[\u062a\u0630\u0643\u064a\u0631] ${text}`;\n\nreturn {\n    json: {\n        telegram_id: telegramId,\n        tagged_message: taggedMessage\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2544,
        1616
      ],
      "id": "0c583222-a501-486e-bb84-6fcc4c2f3bf6",
      "name": "Prepare Roast Memory"
    },
    {
      "parameters": {
        "jsCode": "const text = $('Generate Feedback').item.json.text;\nconst telegramId = $('Calculate Stats').item.json.telegram_id;\n\nconst taggedMessage = `[\u0645\u0644\u062e\u0635 \u0627\u0644\u064a\u0648\u0645] ${text}`;\n\nreturn {\n    json: {\n        telegram_id: telegramId,\n        tagged_message: taggedMessage\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2544,
        1888
      ],
      "id": "122bcf9b-e584-43b8-b254-9b48297439cf",
      "name": "Prepare Azkar Memory1"
    },
    {
      "parameters": {
        "jsCode": "const text = $('Prepare First Day Feedback').item.json.text;\nconst telegramId = $('Prepare First Day Feedback').item.json.telegram_id;\n\nconst taggedMessage = `[\u062a\u0631\u062d\u064a\u0628] ${text}`;\n\nreturn {\n    json: {\n        telegram_id: telegramId,\n        tagged_message: taggedMessage\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2544,
        2016
      ],
      "id": "da077a98-48b8-487f-99b2-1697d4c70e94",
      "name": "Prepare Azkar Memory2"
    },
    {
      "parameters": {
        "mode": "insert",
        "messages": {
          "messageValues": [
            {
              "message": "={{ $json.tagged_message }}"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.memoryManager",
      "typeVersion": 1.1,
      "position": [
        2992,
        1824
      ],
      "id": "b6f5e7a6-fd2d-4900-83c8-411c4b87a235",
      "name": "Chat Memory Manager1",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "const text = $('Prepare Azkar Sabah').item.json.text;\nconst telegramId = $('Prepare Azkar Sabah').item.json.telegram_id;\n\nreturn {\n    json: {\n        telegram_id: telegramId,\n        tagged_message: `[\u0623\u0630\u0643\u0627\u0631 \u0635\u0628\u0627\u062d] \u0628\u0639\u062a\u0644\u0643 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0635\u0628\u0627\u062d`\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2288,
        1680
      ],
      "id": "9c1e1450-3461-4abc-8e2a-3c4e5b8165b2",
      "name": "Prepare Azkar Sabah1"
    },
    {
      "parameters": {
        "jsCode": "const text = $('Prepare Azkar Masa').item.json.text;\nconst telegramId = $('Prepare Azkar Masa').item.json.telegram_id;\n\nreturn {\n    json: {\n        telegram_id: telegramId,\n        tagged_message: `[\u0623\u0630\u0643\u0627\u0631 \u0645\u0633\u0627\u0621] \u0628\u0639\u062a\u0644\u0643 \u0623\u0630\u0643\u0627\u0631 \u0627\u0644\u0645\u0633\u0627\u0621`\n    }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2272,
        1808
      ],
      "id": "90258990-06be-481f-a110-9cc9860b121c",
      "name": "Prepare Azkar Masah"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "UPDATE prayer_times_cache \nSET {{ $('Brain (Optimized)').item.json.prayer.toLowerCase() }}_notified = TRUE \nWHERE user_id = {{ $('Brain (Optimized)').item.json.user.telegram_id }} \n  AND date = (NOW() AT TIME ZONE '{{ $('Brain (Optimized)').item.json.user.timezone }}')::date;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        384,
        1168
      ],
      "id": "c776e3a1-ef5c-4323-828f-862a561247af",
      "name": "Mark Notified",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "={{ $json.user.telegram_id }}",
        "text": "={{ $json.message }}",
        "replyMarkup": "inlineKeyboard",
        "inlineKeyboard": {
          "rows": [
            {
              "row": {
                "buttons": [
                  {
                    "text": "\u2705 \u0641\u064a \u0627\u0644\u0648\u0642\u062a",
                    "additionalFields": {
                      "callback_data": "={{ $json.prayer }}|{{ new Date().toLocaleDateString('en-CA', { timeZone: $json.user.timezone || 'Africa/Cairo' }) }}|on_time|{{ $json.prayerTime }}|{{ $json.user.timezone || 'Africa/Cairo' }}"
                    }
                  },
                  {
                    "text": "\u23f0 \u0642\u0636\u0627\u0621",
                    "additionalFields": {
                      "callback_data": "={{ $json.prayer }}|{{ new Date().toLocaleDateString('en-CA', { timeZone: $json.user.timezone || 'Africa/Cairo' }) }}|qada|{{ $json.prayerTime }}|{{ $json.user.timezone || 'Africa/Cairo' }}"
                    }
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        176,
        1168
      ],
      "id": "71424cd7-fecd-40bd-a31a-bd6f66669261",
      "name": "Send Prayer Notify",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    }
  ],
  "connections": {
    "Heartbeat (15 min)": {
      "main": [
        [
          {
            "node": "Get Users + Cache",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Users + Cache": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Brain (Optimized)": {
      "main": [
        [
          {
            "node": "Action Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Action Switch": {
      "main": [
        [
          {
            "node": "Send Prayer Notify",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Roast",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Daily Stats",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Azkar Sabah",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Azkar Masa",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare First Day Feedback",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Roast": {
      "main": [
        [
          {
            "node": "Send Roast",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Roast": {
      "main": [
        [
          {
            "node": "Mark Roasted",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Roast Memory",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Roasted": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Stats": {
      "main": [
        [
          {
            "node": "Generate Feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Feedback": {
      "main": [
        [
          {
            "node": "Send Feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Feedback",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Send Feedback": {
      "main": [
        [
          {
            "node": "Mark Feedback Sent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Azkar Memory1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Feedback Sent": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Daily Stats": {
      "main": [
        [
          {
            "node": "Calculate Stats",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Azkar Sabah": {
      "main": [
        [
          {
            "node": "Mark Azkar Sabah Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Azkar Sabah Sent": {
      "main": [
        [
          {
            "node": "Send Azkar Sabah",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Azkar Masa": {
      "main": [
        [
          {
            "node": "Mark Azkar Masa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Users4": {
      "main": [
        [],
        [
          {
            "node": "Brain (Optimized)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Azkar Masa": {
      "main": [
        [
          {
            "node": "Send Azkar Masa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Azkar Sabah": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Azkar Sabah1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Azkar Masa": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Azkar Masah",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare First Day Feedback": {
      "main": [
        [
          {
            "node": "Send First Day Feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send First Day Feedback": {
      "main": [
        [
          {
            "node": "Mark First Day Feedback Sent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Prepare Azkar Memory2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark First Day Feedback Sent": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Notification Memory": {
      "main": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory2": {
      "ai_memory": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Roast Memory": {
      "main": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Azkar Memory1": {
      "main": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Azkar Memory2": {
      "main": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Azkar Sabah1": {
      "main": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Azkar Masah": {
      "main": [
        [
          {
            "node": "Chat Memory Manager1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Notified": {
      "main": [
        [
          {
            "node": "Loop Over Users4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Prayer Notify": {
      "main": [
        [
          {
            "node": "Prepare Notification Memory",
            "type": "main",
            "index": 0
          },
          {
            "node": "Mark Notified",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "meta": {
    "templateCredsSetupCompleted": true
  }
}