package comsoc

import (
	"errors"
)

func TieBreakFactory(tieBreakAlts []Alternative) func([]Alternative) (Alternative, error) {
	return func(alts []Alternative) (Alternative, error) {
		if len(alts) == 0 || alts == nil {
			return -1, errors.New("002: NullAlternatives")
		}

		for _, alt := range alts {
			for _, tieBreakAlt := range tieBreakAlts {
				if alt == tieBreakAlt {
					return alt, nil
				}
			}
		}
		return -1, errors.New("002: NoTieBreakAlternativeFound")
	}
}

//func SWFFactory(swf1 func (Profile) (Count, error), tieBreak func ([]Alternative) (Alternative, error)) (swf2 func(Profile) (alts []Alternative, err error)) {
//  return func(p Profile) (alts Alternative, err error) {
//    alts, _ := maxCount(swf1(p))
//    alt, _ := tieBreak(alts)
//    return alt, nil
//    il faut trifouiller le count
//  }
//}

func SCFFactory(scf1 func(Profile) ([]Alternative, error), tieBreak func([]Alternative) (Alternative, error)) (scf2 func(Profile) (alt Alternative, err error)) {
	return func(p Profile) (Alternative, error) {
		alts, _ := scf1(p)
		alt, _ := tieBreak(alts)
		return alt, nil
	}
}

// func TieBreak(a []Alternative) (Alternative, err error) {
//   // if len(a) == 0 || a == nil {
//   //   return _, errors.New("002: NullAlternatives")
//   // }
//   // for _,alt := range a {
//   //
//   // }                       // 0-votes alternatives are not included
//   // return nil, nil
// }