/*
 * SPDX-FileCopyrightText: © 2017-2025 Istari Digital, Inc.
 * SPDX-License-Identifier: Apache-2.0
 */

package badger

import (
	
	
	
	
	

	
	
)

func ( *levelsController) () error {
	for ,  := range .levels {
		if  := .validate();  != nil {
			return y.Wrap(, "Levels Controller")
		}
	}
	return nil
}

// Check does some sanity check on one level of data or in-memory index.
func ( *levelHandler) () error {
	if .level == 0 {
		return nil
	}

	.RLock()
	defer .RUnlock()
	 := len(.tables)
	for  := 1;  < ; ++ {
		if  >= len(.tables) {
			return fmt.Errorf("Level %d, j=%d numTables=%d", .level, , )
		}

		if y.CompareKeys(.tables[-1].Biggest(), .tables[].Smallest()) >= 0 {
			return fmt.Errorf(
				"Inter: Biggest(j-1)[%d] \n%s\n vs Smallest(j)[%d]: \n%s\n: "+
					"level=%d j=%d numTables=%d",
				.tables[-1].ID(), hex.Dump(.tables[-1].Biggest()), .tables[].ID(),
				hex.Dump(.tables[].Smallest()), .level, , )
		}

		if y.CompareKeys(.tables[].Smallest(), .tables[].Biggest()) > 0 {
			return fmt.Errorf(
				"Intra: \n%s\n vs \n%s\n: level=%d j=%d numTables=%d",
				hex.Dump(.tables[].Smallest()), hex.Dump(.tables[].Biggest()), .level, , )
		}
	}
	return nil
}

// func (s *KV) debugPrintMore() { s.lc.debugPrintMore() }

// // debugPrintMore shows key ranges of each level.
// func (s *levelsController) debugPrintMore() {
// 	s.Lock()
// 	defer s.Unlock()
// 	for i := 0; i < s.kv.opt.MaxLevels; i++ {
// 		s.levels[i].debugPrintMore()
// 	}
// }

// func (s *levelHandler) debugPrintMore() {
// 	s.RLock()
// 	defer s.RUnlock()
// 	s.elog.Printf("Level %d:", s.level)
// 	for _, t := range s.tables {
// 		y.Printf(" [%s, %s]", t.Smallest(), t.Biggest())
// 	}
// 	y.Printf("\n")
// }

// reserveFileID reserves a unique file id.
func ( *levelsController) () uint64 {
	 := .nextFileID.Add(1)
	return  - 1
}

func getIDMap( string) map[uint64]struct{} {
	,  := os.ReadDir()
	y.Check()
	 := make(map[uint64]struct{})
	for ,  := range  {
		if .IsDir() {
			continue
		}
		,  := table.ParseFileID(.Name())
		if ! {
			continue
		}
		[] = struct{}{}
	}
	return 
}

func init() {
	rand.Seed(time.Now().UnixNano())
}