package seedrows

import (
	"encoding/json"
	"fmt"
)

// StandardPermissionRow describes one row in the permission catalog payload.
// Rows become _System_Permission entries and, via DefaultGrantedTo, initial
// grants into each profile's backing PermissionSet. Custom permissions authored
// at runtime by admins go into _System_CustomPermission.
type StandardPermissionRow struct {
	APIName          string   `json:"apiName"`
	Label            string   `json:"label"`
	Category         string   `json:"category"`
	Description      string   `json:"description"`
	Requires         string   `json:"requires,omitempty"`
	DefaultGrantedTo []string `json:"defaultGrantedTo,omitempty"`
}

// ParseStandardPermissions parses a permission catalog payload owned by either
// a platform pack or an app pack.
func ParseStandardPermissions(payload []byte, source string) ([]StandardPermissionRow, error) {
	var rows []StandardPermissionRow
	if err := json.Unmarshal(payload, &rows); err != nil {
		return nil, fmt.Errorf("parse %s: %w", source, err)
	}
	if len(rows) == 0 {
		return nil, fmt.Errorf("%s is empty — refusing to seed a permission catalog with zero rows", source)
	}
	return rows, nil
}
