package persistence

import (
	"context"
	"database/sql"
)

func (r *PermissionRepository) GetPendingApprovalLockInfo(ctx context.Context, targetObjectID string) (processInstanceID string, lockType string, err error) {
	const query = `
		SELECT pi.Id, COALESCE(pd.LockType, '')
		FROM ProcessInstance pi
		INNER JOIN ProcessDefinition pd ON pd.Id = pi.ProcessDefinitionId
		WHERE pi.TargetObjectId = ? AND pi.Status = 'Pending'
		ORDER BY pi.CreatedDate DESC
		LIMIT 1
	`

	err = r.getExecutor(ctx).QueryRowContext(ctx, query, targetObjectID).Scan(&processInstanceID, &lockType)
	if err == sql.ErrNoRows {
		return "", "", nil
	}
	if err != nil {
		return "", "", err
	}
	return processInstanceID, lockType, nil
}

func (r *PermissionRepository) HasPendingApprovalWorkitemForUser(ctx context.Context, processInstanceID, userID string) (bool, error) {
	const query = `
		SELECT 1
		FROM ProcessInstanceWorkitem
		WHERE ProcessInstanceId = ? AND ActorId = ?
		LIMIT 1
	`

	var exists int
	err := r.getExecutor(ctx).QueryRowContext(ctx, query, processInstanceID, userID).Scan(&exists)
	if err == sql.ErrNoRows {
		return false, nil
	}
	if err != nil {
		return false, err
	}
	return true, nil
}
