{
	"info": {
		"_postman_id": "simpler-mobile-api-v2",
		"name": "Simpler Mobile App API v2.0",
		"description": "Complete API collection for the Azotel Simpler Mobile App backend with auto-cleanup features",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"auth": {
		"type": "bearer",
		"bearer": [
			{
				"key": "token",
				"value": "{{auth_token}}",
				"type": "string"
			}
		]
	},
	"variable": [
		{
			"key": "base_url",
			"value": "http://localhost",
			"type": "string"
		},
		{
			"key": "api_version",
			"value": "v1",
			"type": "string"
		},
		{
			"key": "auth_token",
			"value": "",
			"type": "string"
		},
		{
			"key": "invoicing_id",
			"value": "12345",
			"type": "string"
		},
		{
			"key": "phone",
			"value": "0123456789",
			"type": "string"
		}
	],
	"item": [
		{
			"name": "Authentication",
			"item": [
				{
					"name": "Check Customer",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Response has success field\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"});",
									"",
									"if (pm.response.json().success) {",
									"    pm.test(\"Customer data is valid\", function () {",
									"        const jsonData = pm.response.json();",
									"        pm.expect(jsonData.data).to.have.property('exists');",
									"        pm.expect(jsonData.data).to.have.property('password_set');",
									"    });",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"invoicing_id\": \"{{invoicing_id}}\",\n  \"phone\": \"{{phone}}\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/auth/check-customer",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"auth",
								"check-customer"
							]
						}
					},
					"response": []
				},
				{
					"name": "Set Password",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Password set successfully\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"invoicing_id\": \"{{invoicing_id}}\",\n  \"password\": \"SecurePassword123!\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/auth/set-password",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"auth",
								"set-password"
							]
						}
					},
					"response": []
				},
				{
					"name": "Login",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Login successful\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('token');",
									"    pm.expect(jsonData.data).to.have.property('user');",
									"});",
									"",
									"// Save token for subsequent requests",
									"if (pm.response.json().success) {",
									"    pm.environment.set('auth_token', pm.response.json().data.token);",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"invoicing_id\": \"{{invoicing_id}}\",\n  \"password\": \"SecurePassword123!\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/auth/login",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"auth",
								"login"
							]
						}
					},
					"response": []
				},
				{
					"name": "Logout",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Logout successful\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/auth/logout",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"auth",
								"logout"
							]
						}
					},
					"response": []
				}
			]
		},
		{
			"name": "Customer Data",
			"item": [
				{
					"name": "Get Customer Info",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Customer data retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('customer');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{auth_token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/customer/info",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"customer",
								"info"
							]
						}
					},
					"response": []
				},
				{
					"name": "Get Customer Invoices",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Invoices data retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('invoices');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{auth_token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/customer/invoices",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"customer",
								"invoices"
							]
						}
					},
					"response": []
				},
				{
					"name": "Get Account Balance",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Balance data retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('balance');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{auth_token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/customer/balance",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"customer",
								"balance"
							]
						}
					},
					"response": []
				}
			]
		},
		{
			"name": "Outage Management",
			"item": [
				{
					"name": "Get Active Outages",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Outages data retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.be.an('array');",
									"});",
									"",
									"pm.test(\"Auto-cleanup triggered\", function () {",
									"    // This endpoint automatically triggers cleanup",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.message).to.include('retrieved');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages"
							]
						}
					},
					"response": []
				},
				{
					"name": "Get All Outages (Admin)",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"All outages data retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('outages');",
									"    pm.expect(jsonData.data).to.have.property('total');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/all?limit=50&offset=0",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"all"
							],
							"query": [
								{
									"key": "limit",
									"value": "50"
								},
								{
									"key": "offset",
									"value": "0"
								}
							]
						}
					},
					"response": []
				},
				{
					"name": "Get Outage Statistics",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Statistics data retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('total_outages');",
									"    pm.expect(jsonData.data).to.have.property('ongoing_outages');",
									"    pm.expect(jsonData.data).to.have.property('planned_outages');",
									"    pm.expect(jsonData.data).to.have.property('resolved_outages');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/stats",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"stats"
							]
						}
					},
					"response": []
				},
				{
					"name": "Create Outage",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Outage created successfully\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('outage_id');",
									"});",
									"",
									"// Save outage ID for subsequent requests",
									"if (pm.response.json().success) {",
									"    pm.environment.set('outage_id', pm.response.json().data.outage_id);",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"title\": \"Network Maintenance - Test\",\n  \"description\": \"Scheduled maintenance for infrastructure upgrade\",\n  \"status\": \"planned\",\n  \"severity\": \"medium\",\n  \"affected_services\": [\"Internet\", \"VoIP\"],\n  \"affected_areas\": [\"Cape Town\", \"Johannesburg\"],\n  \"start_time\": \"2025-07-06 14:00:00\",\n  \"estimated_resolution\": \"2025-07-06 18:00:00\",\n  \"created_by\": \"api_test\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages"
							]
						}
					},
					"response": []
				},
				{
					"name": "Update Outage",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Outage updated successfully\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"title\": \"Network Maintenance - Updated\",\n  \"description\": \"Updated maintenance schedule\",\n  \"status\": \"ongoing\",\n  \"severity\": \"high\",\n  \"affected_services\": [\"Internet\", \"VoIP\", \"IPTV\"],\n  \"affected_areas\": [\"Cape Town\", \"Johannesburg\", \"Durban\"],\n  \"start_time\": \"2025-07-06 14:00:00\",\n  \"estimated_resolution\": \"2025-07-06 20:00:00\",\n  \"updated_by\": \"api_test\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/{{outage_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"{{outage_id}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Resolve Outage",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Outage resolved successfully\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"});",
									"",
									"pm.test(\"Resolved_at timestamp set\", function () {",
									"    // This update should set the resolved_at timestamp",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.message).to.include('updated');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "PUT",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"title\": \"Network Maintenance - Resolved\",\n  \"description\": \"Maintenance completed successfully\",\n  \"status\": \"resolved\",\n  \"severity\": \"high\",\n  \"affected_services\": [\"Internet\", \"VoIP\", \"IPTV\"],\n  \"affected_areas\": [\"Cape Town\", \"Johannesburg\", \"Durban\"],\n  \"start_time\": \"2025-07-06 14:00:00\",\n  \"estimated_resolution\": \"2025-07-06 20:00:00\",\n  \"updated_by\": \"api_test\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/{{outage_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"{{outage_id}}"
							]
						}
					},
					"response": []
				},
				{
					"name": "Delete Outage",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Outage deleted successfully\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "DELETE",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/{{outage_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"{{outage_id}}"
							]
						}
					},
					"response": []
				}
			]
		},
		{
			"name": "Auto-Cleanup Features",
			"item": [
				{
					"name": "Get Cleanup Statistics",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Cleanup statistics retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('total_resolved');",
									"    pm.expect(jsonData.data).to.have.property('cleanup_eligible');",
									"    pm.expect(jsonData.data).to.have.property('recent_resolved');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/cleanup/stats",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"cleanup",
								"stats"
							]
						}
					},
					"response": []
				},
				{
					"name": "Perform Manual Cleanup",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Cleanup completed\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('deleted_count');",
									"});",
									"",
									"pm.test(\"Cleanup message is informative\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.message).to.be.a('string');",
									"    pm.expect(jsonData.message.length).to.be.greaterThan(0);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{}"
						},
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/outages/cleanup",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"outages",
								"cleanup"
							]
						}
					},
					"response": []
				}
			]
		},
		{
			"name": "System Information",
			"item": [
				{
					"name": "Ping - Health Check",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"API is healthy\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.message).to.include('API is running');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/ping",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"ping"
							]
						}
					},
					"response": []
				},
				{
					"name": "Get System Info",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"System info retrieved\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.success).to.be.true;",
									"    pm.expect(jsonData.data).to.have.property('version');",
									"    pm.expect(jsonData.data).to.have.property('timestamp');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{auth_token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/{{api_version}}/system/info",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"{{api_version}}",
								"system",
								"info"
							]
						}
					},
					"response": []
				}
			]
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"exec": [
					"// Set base URL if not already set",
					"if (!pm.environment.get('base_url')) {",
					"    pm.environment.set('base_url', 'http://localhost');",
					"}",
					"",
					"// Set API version if not already set",
					"if (!pm.environment.get('api_version')) {",
					"    pm.environment.set('api_version', 'v1');",
					"}",
					"",
					"// Set default test credentials if not already set",
					"if (!pm.environment.get('invoicing_id')) {",
					"    pm.environment.set('invoicing_id', '12345');",
					"}",
					"",
					"if (!pm.environment.get('phone')) {",
					"    pm.environment.set('phone', '0123456789');",
					"}"
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"exec": [
					"// Global test for JSON response",
					"pm.test(\"Response is JSON\", function () {",
					"    pm.response.to.be.json;",
					"});",
					"",
					"// Global test for response time",
					"pm.test(\"Response time is less than 2000ms\", function () {",
					"    pm.expect(pm.response.responseTime).to.be.below(2000);",
					"});",
					"",
					"// Log response for debugging",
					"if (pm.response.code !== 200) {",
					"    console.log('Response:', pm.response.text());",
					"}"
				]
			}
		}
	]
}
