package main

import (
	"fmt"
	"time"

	"github.com/smartystreets/go-disruptor"
)

func consume0(reader *disruptor.SimpleReader) {
	for {
		reader.Receive()
	}
}
func consume1(reader *disruptor.Reader) {
	started := time.Now()

	// fmt.Printf("\t\t\t\t\t[CONSUMER] Starting consumer...\n")
	for {
		sequence, remaining := reader.Receive()
		if remaining >= 0 {
			// fmt.Printf("\t\t\t\t\t[CONSUMER] Received messages starting at sequence %d, with %d messages remaining\n", sequence, remaining)

			for remaining >= 0 {
				if sequence%ReportingFrequency == 0 {
					finished := time.Now()
					fmt.Println(sequence, finished.Sub(started))
					started = time.Now()
				}

				message := ringBuffer[sequence&RingMask]
				// fmt.Printf("\t\t\t\t\t[CONSUMER] Consuming sequence %d. Message Payload: %d\n", sequence, message)
				if sequence != message {
					// alert := fmt.Sprintf("--------------\n\t\t\t\t\t[CONSUMER] ***Race Condition***::Sequence: %d, Message %d\n", sequence, message)
					alert := fmt.Sprintf("***Race Condition***::Sequence: %d, Message %d\n", sequence, message)
					fmt.Println(alert)
					panic(alert)
				}

				//ringBuffer[sequence&RingMask] = sequence % 2

				remaining--
				sequence++
			}

			// fmt.Println("\t\t\t\t\t[CONSUMER] All messages consumed, committing up to sequence ", sequence-1)
			reader.Commit(sequence - 1)
			// } else {
			// 	if remaining == disruptor.Gating {
			// 		fmt.Println("\t\t\t\t\t[CONSUMER] Consumer gating at sequence", sequence)
			// 	} else if remaining == disruptor.Idling {
			// 		fmt.Println("\t\t\t\t\t[CONSUMER] Consumer idling at sequence", sequence)
			// 	}
			// 	//time.Sleep(time.Millisecond * 10)
		}
	}
}

func consume2(reader *disruptor.Reader) {
	for {
		sequence, remaining := reader.Receive()
		if remaining >= 0 {
			for remaining >= 0 {
				message := ringBuffer[sequence&RingMask]
				if message != sequence%2 {
					alert := fmt.Sprintf("Race Condition (Layer 2)::Sequence: %d, Message %d\n", sequence, message)
					fmt.Print(alert)
					panic(alert)
				}

				remaining--
				sequence++
			}
			reader.Commit(sequence - 1)
		} else {
		}
	}
}
