# AGENTS.md

## هدف پروژه
این پروژه یک برنامه **Windows Forms** با **.NET Framework 4.5** و ساختار کلاسیک (non-SDK) است.  
فایل پروژه: `MyShop.csproj`  
فرم اصلی فعلی: `Form1`  
پایگاه داده هدف: **Microsoft Access**

---

## قوانین کلی برای Agent (Codex)

1. **سازگاری نسخه‌ای (خیلی مهم)**
   - تمام کدها باید با `.NET Framework 4.5` سازگار باشند.
   - از سینتکس‌ها و قابلیت‌های جدید C# که ممکن است در ابزارهای قدیمی مشکل ایجاد کنند استفاده نشود.
   - فرض بر سازگاری با محیط قدیمی Visual Studio / MSBuild باشد.

2. **زبان کامنت‌ها**
   - تمام کامنت‌های کد باید **فارسی** باشند.
   - متن‌های توضیحی داخل کد (در صورت نیاز) فارسی نوشته شوند.

3. **ساخت و اجرا**
   - ساخت و اجرا از طریق **Visual Studio** انجام می‌شود.
   - تغییراتی که نیازمند ابزار خارج از روال عادی Visual Studio هستند اعمال نشود مگر با درخواست صریح.

4. **قانون تغییرات**
   - تغییرات باید **حداقلی، دقیق و قابل‌ردیابی** باشند.
   - از بازنویسی گسترده‌ی فایل‌ها بدون نیاز خودداری شود.
   - قبل از اعمال تغییرات پرریسک، توضیح کوتاه از اثر تغییر ارائه شود.

---

## قوانین مربوط به WinForms و Designer

1. فایل‌های زیر جزو ساختار اصلی WinForms هستند:
   - `Form1.cs`
   - `Form1.Designer.cs`
   - `Program.cs`
   - `Properties/*`

2. **ویرایش `*.Designer.cs` مجاز است**، اما با دقت:
   - فقط تغییرات لازم برای پیاده‌سازی UI خواسته‌شده انجام شود.
   - نام کنترل‌ها معنی‌دار و پایدار انتخاب شوند.
   - از حذف/تغییر ناخواسته تنظیمات فرم و کنترل‌ها جلوگیری شود.

3. اگر UI بر اساس تصویر/طرح خواسته شد:
   - ابتدا لیست کنترل‌های لازم، نام‌ها و نوع‌ها مشخص شود.
   - سپس `InitializeComponent` به‌صورت منظم و قابل‌فهم تولید/ویرایش شود.
   - در صورت ابهام در فاصله‌ها/ابعاد، از مقادیر منطقی و قابل اصلاح استفاده شود.

---

## قوانین پایگاه داده (Microsoft Access)

1. اتصال دیتابیس با `OleDb` انجام شود (سازگار با .NET Framework 4.5).
2. از **Query پارامتری** استفاده شود (جلوگیری از خطا و Injection).
3. Connection string در `App.config` نگهداری شود (نه هاردکد داخل فرم).
4. عملیات دیتابیس:
   - `using` برای `OleDbConnection`, `OleDbCommand`, `OleDbDataAdapter` رعایت شود.
   - مدیریت خطا با `try/catch` انجام شود و پیام مناسب به کاربر نمایش داده شود.
5. نام جدول/فیلدها در صورت استفاده از کلمات رزرو‌شده Access، با براکت `[]` مدیریت شوند.

---

## سبک کدنویسی

1. نام‌گذاری:
   - کلاس‌ها و متدها: واضح و معنی‌دار.
   - کنترل‌ها: پیشوند مناسب (مثل `txtName`, `btnSave`, `dgvProducts`).
2. متدها کوتاه و مسئولیت‌محور باشند.
3. منطق دیتابیس تا حد ممکن از کد مستقیم UI جدا شود (در حد سبک پروژه).
4. از افزودن وابستگی/NuGet جدید بدون درخواست صریح خودداری شود.
5. از تغییر خودکار فایل‌های `Properties/*.Designer.cs` مگر در صورت نیاز مشخص خودداری شود.

---

## موارد خارج از محدوده (مگر با درخواست کاربر)

- افزودن فریم‌ورک‌های جدید (WPF, ASP.NET, EF جدید و ...)
- مهاجرت پروژه به نسخه‌های جدید .NET
- افزودن زیرساخت تست خودکار
- تغییرات معماری سنگین

---

## چک‌لیست قبل از تحویل تغییر

- [ ] کد با .NET Framework 4.5 سازگار است.
- [ ] کامنت‌ها فارسی هستند.
- [ ] تغییرات حداقلی و مرتبط با درخواست هستند.
- [ ] در صورت استفاده از Access، کوئری‌ها پارامتری هستند.
- [ ] فایل‌های Designer بدون آسیب به ساختار فرم ویرایش شده‌اند.
- [ ] برنامه در Visual Studio قابل Build/Run است.

---

## قالب پاسخ‌دهی Agent برای هر تسک

1. خلاصه کوتاه از کار انجام‌شده
2. لیست فایل‌های تغییرکرده
3. نکات مهم/ریسک‌ها
4. اگر ابهام وجود داشت: سوال شفاف قبل از اعمال تغییر نهایی
