{
  "schemaVersion": "1.0",
  "metadata": {
    "id": "acme_crm",
    "title": "Acme CRM",
    "locale": "tr"
  },
  "compatibility": {
    "contract": "1.0",
    "requiredCapabilities": [
      "table",
      "form",
      "lookup",
      "money",
      "text",
      "settings",
      "request",
      "message"
    ]
  },
  "connections": {
    "crm": {
      "origin": "https://crm.example.test"
    }
  },
  "operations": {
    "login": {
      "connection": "crm",
      "method": "POST",
      "path": "/auth/login",
      "auth": "none",
      "response": {
        "data": "/data"
      },
      "body": {
        "email": {
          "kind": "binding",
          "source": "input",
          "pointer": "/email"
        },
        "password": {
          "kind": "binding",
          "source": "input",
          "pointer": "/password"
        }
      }
    },
    "refresh": {
      "connection": "crm",
      "method": "POST",
      "path": "/auth/refresh",
      "auth": "none",
      "response": {
        "data": "/data"
      },
      "body": {
        "refresh_token": {
          "kind": "binding",
          "source": "session",
          "pointer": "/refresh_token"
        }
      }
    },
    "me": {
      "connection": "crm",
      "method": "GET",
      "path": "/me",
      "auth": "session",
      "response": {
        "data": "/data"
      }
    },
    "customers_list": {
      "connection": "crm",
      "method": "GET",
      "path": "/customers",
      "auth": "session",
      "response": {
        "data": "/data"
      }
    },
    "customer_update": {
      "connection": "crm",
      "method": "PATCH",
      "path": "/customers/{id}",
      "auth": "session",
      "response": {
        "data": "/data",
        "fieldErrors": "/error/fields"
      },
      "pathParams": {
        "id": {
          "kind": "binding",
          "source": "record",
          "pointer": "/id"
        }
      },
      "body": {
        "name": {
          "kind": "binding",
          "source": "form",
          "pointer": "/name"
        },
        "company": {
          "kind": "binding",
          "source": "form",
          "pointer": "/company"
        }
      }
    },
    "companies_search": {
      "connection": "crm",
      "method": "GET",
      "path": "/companies",
      "auth": "session",
      "response": {
        "data": "/data",
        "nextCursor": "/next"
      },
      "query": {
        "q": {
          "kind": "binding",
          "source": "input",
          "pointer": "/search"
        }
      },
      "pagination": {
        "mode": "cursor",
        "parameter": "cursor",
        "pageSize": 25
      }
    },
    "settings_load": {
      "connection": "crm",
      "method": "GET",
      "path": "/settings",
      "auth": "session",
      "response": {
        "data": "/data"
      }
    },
    "settings_save": {
      "connection": "crm",
      "method": "PATCH",
      "path": "/settings",
      "auth": "session",
      "response": {
        "data": "/data",
        "fieldErrors": "/error/fields"
      },
      "body": {
        "title": {
          "kind": "binding",
          "source": "form",
          "pointer": "/title"
        }
      }
    },
    "logout": {
      "connection": "crm",
      "method": "POST",
      "path": "/auth/logout",
      "auth": "session",
      "response": {
        "data": "/data"
      },
      "body": {
        "refresh_token": {
          "kind": "binding",
          "source": "session",
          "pointer": "/refresh_token"
        }
      }
    }
  },
  "auth": {
    "mode": "bearer",
    "connection": "crm",
    "login": "login",
    "refresh": "refresh",
    "me": "me",
    "tokenPointer": "/data/access_token",
    "refreshTokenPointer": "/data/refresh_token",
    "header": "Authorization",
    "prefix": "Bearer ",
    "subjectPointer": "/data/subject",
    "permissionsPointer": "/data/permissions",
    "tenantPointer": "/data/tenant",
    "logout": "logout"
  },
  "permissions": {
    "customers_read": "Müşterileri gör",
    "customers_write": "Müşterileri düzenle",
    "settings_write": "Şirket ayarlarını düzenle",
    "balance_read": "Bakiyeleri gör"
  },
  "rules": {
    "has_name": {
      "operator": "ne",
      "left": {
        "kind": "binding",
        "source": "form",
        "pointer": "/name"
      },
      "right": {
        "kind": "literal",
        "value": ""
      }
    }
  },
  "actions": {
    "save_customer": {
      "type": "request",
      "operation": "customer_update",
      "permission": "customers_write",
      "visibleWhen": "has_name",
      "next": "saved"
    },
    "saved": {
      "type": "message",
      "text": "Kaydedildi"
    }
  },
  "resources": {
    "customers": {
      "label": "Müşteriler",
      "list": "customers_list",
      "update": "customer_update",
      "access": {
        "read": "customers_read",
        "write": "customers_write"
      },
      "fields": {
        "name": {
          "type": "text",
          "label": "Ad",
          "required": true
        },
        "balance": {
          "type": "money",
          "label": "Bakiye",
          "number": {
            "scale": 2,
            "rounding": "half_even",
            "currency": "TRY"
          },
          "access": {
            "read": "balance_read",
            "write": "customers_write"
          }
        },
        "company": {
          "type": "lookup",
          "label": "Şirket",
          "lookup": {
            "operation": "companies_search",
            "mode": "search",
            "multiple": false,
            "minCharacters": 2,
            "debounceMs": 300,
            "valuePointer": "/id",
            "labelPointer": "/name"
          }
        }
      }
    }
  },
  "views": {
    "customers": {
      "type": "table",
      "title": "Müşteriler",
      "resource": "customers",
      "columns": [
        "name",
        "balance",
        "company"
      ]
    },
    "customer_edit": {
      "type": "form",
      "title": "Müşteriyi düzenle",
      "resource": "customers",
      "fields": [
        "name",
        "company"
      ],
      "actions": [
        "save_customer"
      ]
    },
    "company_settings": {
      "type": "settings",
      "title": "Şirket ayarları",
      "settingsGroup": "company"
    }
  },
  "settings": {
    "company": {
      "title": "Şirket ayarları",
      "scope": "tenant",
      "load": "settings_load",
      "save": "settings_save",
      "fields": {
        "title": {
          "type": "text",
          "label": "Şirket adı"
        }
      },
      "access": {
        "write": "settings_write"
      }
    }
  },
  "navigation": [
    {
      "label": "Müşteriler",
      "view": "customers",
      "permission": "customers_read"
    },
    {
      "label": "Ayarlar",
      "view": "company_settings",
      "permission": "settings_write"
    }
  ]
}
