File size: 2,561 Bytes
8a6248c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { generateAIContent } from '../utils/aiHelper.js';
import { extractLanguage, getLanguageName } from '../utils/aiOrchestrator.js';
import dotenv from "dotenv";

export const soilHealthRecommendations = async (req, res) => {
    dotenv.config();

    const {
        soilPH,
        organicMatter,
        nitrogen,
        phosphorus,
        potassium,
        salinity,
        cropType,
    } = req.body;

    if (
        soilPH === undefined ||
        organicMatter === undefined ||
        nitrogen === undefined ||
        phosphorus === undefined ||
        potassium === undefined ||
        salinity === undefined ||
        !cropType
    ) {
        return res.status(400).json({
            error: "Missing required inputs: soilPH, organicMatter, nitrogen, phosphorus, potassium, salinity, cropType",
        });
    }

    const lang = extractLanguage(req);
    const langName = getLanguageName(lang);
    const langInstruction = lang !== 'en' ? `\n\nRespond STRICTLY in ${langName} language. Translate all fields and values.` : '';

    try {
        const prompt = `
        You are an expert soil scientist.

        Based on the soil data below:
        - pH: ${soilPH}
        - Organic Matter (%): ${organicMatter}
        - Nitrogen (N): ${nitrogen}
        - Phosphorus (P): ${phosphorus}
        - Potassium (K): ${potassium}
        - Salinity (EC): ${salinity}
        - Crop Type: ${cropType}

        Provide:
        1. The main current soil issue (1 short line)
        2. Recommended amendments (bullet list; include lime, gypsum, compost, manure, biofertilizer, etc. if relevant)
        3. NPK balancing recommendation (for example: "increase nitrogen slightly", "reduce phosphorus", etc.)
        4. Estimated time for improvement (e.g., "2–4 weeks", "1–2 months")
        5. A short explanation

        ⚠️ Respond ONLY in valid JSON with this structure:

        {
            "current_issue": "",
            "recommended_amendments": ["", "", ""],
            "npk_adjustment": "",
            "expected_improvement_time": "",
            "note": ""
        }${langInstruction}
        `;

        const recommendation = await generateAIContent(prompt.trim());
        const formattedRecommendation = recommendation.replace("```json", "").replace("```", "").trim();
        res.status(200).json({ recommendation: formattedRecommendation });
    } catch (err) {
        console.error("Error fetching recommendations: ", err);
        res.status(500).json({ error: "Failed to fetch recommendations" });
    }
};