package persistence

import (
	"database/sql"

	"github.com/nexuscrm/shared/pkg/models"
)

func (r *MetadataRepository) scanAction(row Scannable) (*models.ActionMetadata, error) {
	var action models.ActionMetadata
	var icon, targetObject, configJSON sql.NullString
	var createdDateVal, lastModifiedDateVal interface{}
	var isDeleted bool

	// ColsSystemAction: ID, ObjectAPIName, Name, Label, Type, Icon, TargetObject, Config, CreatedDate, LastModifiedDate, IsDeleted
	if err := row.Scan(&action.ID, &action.ObjectAPIName, &action.Name, &action.Label, &action.Type, &icon, &targetObject, &configJSON, &createdDateVal, &lastModifiedDateVal, &isDeleted); err != nil {
		return nil, err
	}
	if icon.Valid {
		action.Icon = icon.String
	}
	if targetObject.Valid {
		action.TargetObject = &targetObject.String
	}
	if configJSON.Valid {
		r.unmarshalJSON(configJSON.String, &action.Config)
	}
	return &action, nil
}

func (r *MetadataRepository) scanValidationRule(row Scannable) (*models.ValidationRule, error) {
	var rule models.ValidationRule
	var active int
	var description, errorDisplayField sql.NullString
	var createdDateVal, lastModifiedDateVal interface{}
	// Scan 11 columns: ID, ObjectAPIName, Name, Description, Active, Condition, ErrorMessage, ErrorDisplayField, IsCustomized, CreatedDate, LastModifiedDate
	if err := row.Scan(&rule.ID, &rule.ObjectAPIName, &rule.Name, &description, &active, &rule.Condition, &rule.ErrorMessage, &errorDisplayField, &rule.IsCustomized, &createdDateVal, &lastModifiedDateVal); err != nil {
		return nil, err
	}
	rule.Active = active != 0
	if description.Valid {
		rule.Description = &description.String
	}
	if errorDisplayField.Valid {
		rule.ErrorDisplayField = &errorDisplayField.String
	}
	return &rule, nil
}
