# Remote Agent Connection Setup

এই guide অন্য hosting-এ থাকা Laravel website-কে এই panel-এর সাথে connect করার জন্য।

এই architecture-এ panel সরাসরি remote database-এ connect করে না।  
Panel API call পাঠায়, আর remote site-এর `agent` নিজের server/database-এ কাজ করে।

## Panel side-এ কী expect করা হচ্ছে

Current panel code [app/Services/RemoteAgentService.php](/C:/contol/app/Services/RemoteAgentService.php:1) থেকে এই endpoint pattern call করে:

- `GET {api_endpoint}/health`
- `POST {api_endpoint}/backups`
- `POST {api_endpoint}/backups/{panel_backup_id}/restore`

এছাড়া future table sync-এর জন্য:

- `GET {api_endpoint}/tables`

## Panel side-এ website add করার সময় যেগুলো লাগবে

- `Website Name`
- `Domain`
- `API Endpoint`
- `API Key`
- `Signing Secret`
- `Description`

Example:

```text
Website Name: Client Site 1
Domain: client1.com
API Endpoint: https://client1.com/api/control-center-agent
API Key: cc_live_token_here
Signing Secret: cc_live_secret_here
```

`API Endpoint`-এ `/health` লিখবেন না।  
Base path দেবেন, panel নিজে `/health`, `/backups` append করবে।

## Remote website-এ কী add করতে হবে

এই repo-তে ready reference stub রাখা হয়েছে:

- [docs/remote-agent-stub/routes-api.stub.php](/C:/contol/docs/remote-agent-stub/routes-api.stub.php:1)
- [docs/remote-agent-stub/ControlCenterAgentController.stub.php](/C:/contol/docs/remote-agent-stub/ControlCenterAgentController.stub.php:1)
- [docs/remote-agent-stub/ValidateControlCenterAgentRequest.stub.php](/C:/contol/docs/remote-agent-stub/ValidateControlCenterAgentRequest.stub.php:1)
- [docs/remote-agent-stub/env.stub.txt](/C:/contol/docs/remote-agent-stub/env.stub.txt:1)

## Remote site-এ `.env` example

```env
CONTROL_CENTER_AGENT_TOKEN=cc_live_token_here
CONTROL_CENTER_AGENT_SECRET=cc_live_secret_here
CONTROL_CENTER_AGENT_TTL=300
```

## Route example

Remote Laravel site-এ route group base ideally এটা হবে:

```text
/api/control-center-agent
```

তাহলে full URLs হবে:

- `https://client1.com/api/control-center-agent/health`
- `https://client1.com/api/control-center-agent/backups`

## Signature rule

Panel request signature format:

```php
hash_hmac('sha256', "{$method}|{$path}|{$timestamp}", $secret ?: $token)
```

Example:

- `GET|/health|2026-07-04T08:00:00+00:00`
- `POST|/backups|2026-07-04T08:00:00+00:00`

Remote agent-এ incoming request validate করতে হবে:

- `Authorization: Bearer <token>`
- `X-Control-Timestamp`
- `X-Control-Signature`

## Remote site setup steps

1. Remote Laravel website-এ stub files copy/adapt করুন
2. `.env`-এ token/secret দিন
3. Route register করুন
4. Middleware register করুন
5. Controller methods নিজের real DB/backup logic দিয়ে complete করুন
6. Browser-এ `https://client1.com/api/control-center-agent/health` directly খুলে test করবেন না

Health endpoint signed request expect করে, তাই panel থেকে `Sync Agent` দিয়ে test করবেন

## Panel থেকে test করার step

1. Panel login করুন
2. `Websites` এ যান
3. নতুন remote website add করুন
4. `API Endpoint`, `API Key`, `Signing Secret` দিন
5. `Sync` চাপুন

যদি success হয়:

- website `online`
- health `healthy`
- agent status `verified / synced`

## Troubleshooting

### Sync failed: HTTP 401

সম্ভবত:

- API key wrong
- signing secret wrong
- timestamp/signature validation wrong

### Sync failed: HTTP 404

সম্ভবত:

- `API Endpoint` ভুল
- route publish হয়নি
- `/health` endpoint path mismatch

### Sync failed: timeout

সম্ভবত:

- remote site firewall block করছে
- controller heavy কাজ করছে
- SSL/DNS issue আছে

## সবচেয়ে গুরুত্বপূর্ণ difference

`panel remote DB setup` আর `remote website agent setup` আলাদা:

- panel DB setup = panel নিজের DB অন্য hosting-এ রাখে
- agent setup = অন্য website panel থেকে manage করার রাস্তা তৈরি করে
