-- name: CreateCustomer :one
INSERT INTO customers (id, name, category, source, address, contact_name, contact_phone, created_by)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
RETURNING *;

-- name: UpdateCustomer :one
UPDATE customers
SET
    name = COALESCE(sqlc.narg(name), name),
    category = COALESCE(sqlc.narg(category), category),
    source = COALESCE(sqlc.narg(source), source),
    address = COALESCE(sqlc.narg(address), address),
    contact_name = COALESCE(sqlc.narg(contact_name), contact_name),
    contact_phone = COALESCE(sqlc.narg(contact_phone), contact_phone),
    status = COALESCE(sqlc.narg(status), status),
    updated_by = COALESCE(sqlc.narg(updated_by), updated_by),
    updated_at = NOW()
WHERE id = $1
RETURNING *;

-- name: GetCustomer :one
SELECT * 
FROM customers 
WHERE id = $1
LIMIT 1;

-- name: AllCustomers :many
SELECT * FROM customers
WHERE status = 0
ORDER BY id DESC;

-- name: CountCustomers :one
SELECT COUNT(1)
FROM customers
WHERE status = 0;

-- name: ListCustomers :many
SELECT * 
FROM customers
WHERE status = 0
ORDER BY id DESC
LIMIT $1 OFFSET $2;