// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ianaindex

import (
	"unicode"
	"unicode/utf8"

	"golang.org/x/text/encoding"
	"golang.org/x/text/encoding/internal"
	"golang.org/x/text/transform"
	"golang.org/x/text/encoding/internal/identifier"
)

type asciiDecoder struct {
	transform.NopResetter
}

func (d asciiDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	for _, c := range src {
		if c > unicode.MaxASCII {
			r := unicode.ReplacementChar
			if nDst + utf8.RuneLen(r) > len(dst) {
				err = transform.ErrShortDst
				break
			}
			nDst += utf8.EncodeRune(dst[nDst:], r)
			nSrc++
			continue
		}

		if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = c
		nDst++
		nSrc++
	}
	return nDst, nSrc, err
}

type asciiEncoder struct {
	transform.NopResetter
}

func (d asciiEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
	for _, c := range src {
		if c > unicode.MaxASCII {
			err = internal.RepertoireError(encoding.ASCIISub)
			break
		}

		if nDst >= len(dst) {
			err = transform.ErrShortDst
			break
		}
		dst[nDst] = c
		nDst++
		nSrc++
	}
	return nDst, nSrc, err
}

var asciiEnc = &internal.Encoding{
	Encoding: &internal.SimpleEncoding{
		asciiDecoder{},
		asciiEncoder{},
	},
	Name: "US-ASCII",
	MIB:  identifier.ASCII,
}
