# Irrigation Recommendation API Fields

این فایل فقط فیلدهای API مربوط به `POST /api/irrigation/recommend/` را توضیح می‌دهد.

## Endpoint

`POST /api/irrigation/recommend/`

## کاربرد

این endpoint برای تولید recommendation آبیاری استفاده می‌شود و خروجی آن با UI فعلی صفحه
`src/views/dashboards/farm/smartIrrigation/SmartIrrigationRecommendation.tsx`
هماهنگ شده است.

## ساختار کلی پاسخ

```json
{
  "code": 200,
  "msg": "success",
  "data": {
    "plan": {},
    "water_balance": {},
    "timeline": [],
    "sections": []
  }
}
```

## Request

### حداقل payload پیشنهادی

```json
{
  "farm_uuid": "11111111-1111-1111-1111-111111111111",
  "plant_name": "گوجه‌فرنگی",
  "growth_stage": "گلدهی",
  "irrigation_type": "آبیاری قطره‌ای"
}
```

### فیلدهای Request

### `farm_uuid`
- نوع: `string`
- اجباری: بله
- توضیح: شناسه یکتای مزرعه.

### `sensor_uuid`
- نوع: `string`
- اجباری: خیر
- توضیح: نام قدیمی برای `farm_uuid`. اگر `farm_uuid` ارسال نشده باشد، این مقدار به جای آن استفاده می‌شود.

### `plant_name`
- نوع: `string`
- اجباری: خیر
- توضیح: نام گیاه هدف برای تولید توصیه. اگر ارسال نشود، سیستم در صورت امکان گیاه ثبت‌شده روی مزرعه را استفاده می‌کند.

### `growth_stage`
- نوع: `string`
- اجباری: خیر
- توضیح: مرحله رشد گیاه مثل `رویشی`، `گلدهی` یا `میوه‌دهی`.

### `irrigation_type`
- نوع: `string`
- اجباری: خیر
- توضیح: نوع یا نام روش آبیاری مورد نظر فرانت. این فیلد برای UI فعلی پیشنهاد می‌شود.

### `irrigation_method_name`
- نوع: `string`
- اجباری: خیر
- توضیح: نام روش آبیاری. این فیلد با `irrigation_type` هم‌ارز است و در بک‌اند به همان ورودی نهایی نرمال می‌شود.


## Response

## فیلدهای لایه اول Response

### `code`
- نوع: `number`
- توضیح: کد وضعیت پاسخ در قالب استاندارد API پروژه.

### `msg`
- نوع: `string`
- توضیح: پیام وضعیت پاسخ. در حالت موفق معمولاً `success` است.

### `data`
- نوع: `object`
- توضیح: بدنه اصلی recommendation آبیاری.

## فیلدهای `data`

### `plan`
- نوع: `object`
- توضیح: خلاصه اصلی recommendation برای نمایش در کارت بالای UI.

### `water_balance`
- نوع: `object`
- توضیح: تراز آب و خروجی محاسبات روزانه FAO-56.

### `timeline`
- نوع: `array`
- توضیح: مراحل اجرایی recommendation برای Stepper.

### `sections`
- نوع: `array`
- توضیح: نکات تکمیلی و هشدارها. در UI فعلی فقط `warning` و `tip` مصرف می‌شوند.

## فیلدهای `data.plan`

```json
{
  "frequencyPerWeek": 4,
  "durationMinutes": 38,
  "bestTimeOfDay": "05:30 تا 08:00 صبح",
  "moistureLevel": 72,
  "warning": "در ساعات گرم روز آبیاری انجام نشود"
}
```

### `frequencyPerWeek`
- نوع: `number`
- توضیح: تعداد نوبت آبیاری در هفته.

### `durationMinutes`
- نوع: `number`
- توضیح: مدت هر نوبت آبیاری بر حسب دقیقه.

### `bestTimeOfDay`
- نوع: `string`
- توضیح: بهترین بازه زمانی اجرای آبیاری.

### `moistureLevel`
- نوع: `number`
- توضیح: سطح رطوبت فعلی یا هدف خاک برای نمایش در gauge.

### `warning`
- نوع: `string`
- توضیح: هشدار اصلی recommendation.

## فیلدهای `data.water_balance`

```json
{
  "active_kc": 0.93,
  "crop_profile": {
    "kc_initial": 0.55,
    "kc_mid": 1.05,
    "kc_end": 0.78
  },
  "daily": [
    {
      "forecast_date": "2025-02-12",
      "et0_mm": 5.4,
      "etc_mm": 4.9,
      "effective_rainfall_mm": 0,
      "gross_irrigation_mm": 17,
      "irrigation_timing": "05:30 - 07:00"
    }
  ]
}
```

### `active_kc`
- نوع: `number`
- توضیح: ضریب Kc فعال برای مرحله رشد فعلی.

### `crop_profile`
- نوع: `object`
- توضیح: پروفایل Kc گیاه در مراحل مختلف.

### `daily`
- نوع: `array`
- توضیح: داده‌های روزانه مورد استفاده در جدول یا نمودار تراز آب.

## فیلدهای `data.water_balance.crop_profile`

### `kc_initial`
- نوع: `number`
- توضیح: Kc مرحله ابتدایی رشد.

### `kc_mid`
- نوع: `number`
- توضیح: Kc مرحله میانی رشد.

### `kc_end`
- نوع: `number`
- توضیح: Kc مرحله پایانی رشد.

## فیلدهای هر آیتم در `data.water_balance.daily[]`

### `forecast_date`
- نوع: `string`
- توضیح: تاریخ پیش‌بینی.

### `et0_mm`
- نوع: `number`
- توضیح: تبخیر و تعرق مرجع روزانه.

### `etc_mm`
- نوع: `number`
- توضیح: تبخیر و تعرق گیاه.

### `effective_rainfall_mm`
- نوع: `number`
- توضیح: بارش مؤثر محاسبه‌شده.

### `gross_irrigation_mm`
- نوع: `number`
- توضیح: مقدار آبیاری ناخالص پیشنهادی برای آن روز.

### `irrigation_timing`
- نوع: `string`
- توضیح: زمان پیشنهادی اجرای آبیاری برای آن روز.

## فیلدهای `data.timeline`

```json
[
  {
    "step_number": 1,
    "title": "بررسی فشار",
    "description": "فشار ابتدا و انتهای لاین کنترل شود"
  }
]
```

### `step_number`
- نوع: `number`
- توضیح: شماره مرحله.

### `title`
- نوع: `string`
- توضیح: عنوان مرحله.

### `description`
- نوع: `string`
- توضیح: توضیح اجرایی مرحله.

## فیلدهای `data.sections`

```json
[
  {
    "title": "هشدار تبخیر بالا",
    "icon": "tabler-alert-triangle",
    "type": "warning",
    "content": "در ساعات گرم روز آبیاری انجام نشود"
  },
  {
    "title": "نکته بهره وری",
    "icon": "tabler-bulb",
    "type": "tip",
    "content": "شست وشوی فیلترها به یکنواختی آبیاری کمک می کند"
  }
]
```

### `title`
- نوع: `string`
- توضیح: عنوان کارت.

### `icon`
- نوع: `string`
- توضیح: نام آیکون مورد استفاده در UI.

### `type`
- نوع: `string`
- توضیح: نوع سکشن. در UI فعلی فقط این مقادیر مصرف می‌شوند:
  - `warning`
  - `tip`

### `content`
- نوع: `string`
- توضیح: متن هشدار یا نکته.

## حداقل پاسخ قابل استفاده برای UI فعلی

```json
{
  "code": 200,
  "msg": "success",
  "data": {
    "plan": {
      "frequencyPerWeek": 4,
      "durationMinutes": 38,
      "bestTimeOfDay": "05:30 تا 08:00 صبح",
      "moistureLevel": 72,
      "warning": "در ساعات گرم روز آبیاری انجام نشود"
    },
    "water_balance": {
      "active_kc": 0.93,
      "crop_profile": {
        "kc_initial": 0.55,
        "kc_mid": 1.05,
        "kc_end": 0.78
      },
      "daily": [
        {
          "forecast_date": "2025-02-12",
          "et0_mm": 5.4,
          "etc_mm": 4.9,
          "effective_rainfall_mm": 0,
          "gross_irrigation_mm": 17,
          "irrigation_timing": "05:30 - 07:00"
        }
      ]
    },
    "timeline": [
      {
        "step_number": 1,
        "title": "بررسی فشار",
        "description": "فشار ابتدا و انتهای لاین کنترل شود"
      }
    ],
    "sections": [
      {
        "title": "هشدار تبخیر بالا",
        "icon": "tabler-alert-triangle",
        "type": "warning",
        "content": "در ساعات گرم روز آبیاری انجام نشود"
      },
      {
        "title": "نکته بهره وری",
        "icon": "tabler-bulb",
        "type": "tip",
        "content": "شست وشوی فیلترها به یکنواختی آبیاری کمک می کند"
      }
    ]
  }
}
```

## فیلدهایی که فرانت فعلی لازم ندارد

فیلدهای زیر برای UI فعلی recommendation لازم نیستند و نباید به عنوان dependency فرانت در نظر گرفته شوند:

- `raw_response`
- `status`
- `generated_at`
- `recommendation_title`
- `recommendation_subtitle`
- `final_verdict`
- `primary_method`
- `usage_summary`
- `alternative_plans`
- `sections[].type = schedule`
- `sections[].type = method`

## نمونه cURL

```bash
curl -s -X POST "http://localhost:8000/api/irrigation/recommend/" \
  -H "accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "farm_uuid": "11111111-1111-1111-1111-111111111111",
    "plant_name": "گوجه‌فرنگی",
    "growth_stage": "گلدهی",
    "irrigation_type": "آبیاری قطره‌ای"
  }'
```
