using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace skyscraper5.Skyscraper.Text.Encodings
{
    [SkyscraperEncoding("dvb-iso-8859-14")]
    class dvb_iso_8859_14 : SkyscraperBaseEncoding8
    {
        protected override char[] Decrypt(byte[] preprocessed)
        {
            StringBuilder resultBuilder = new StringBuilder();
            for (int i = 0; i < preprocessed.Length; i++)
            {
                if (preprocessed[i] <= 0x7e)
                {
                    AsciiTable.GetAsciiChar(preprocessed[i], resultBuilder);
                    continue;
                }
                switch (preprocessed[i])
                {
                    case 0xa0: resultBuilder.Append('\u00a0'); break;
                    case 0xc1: resultBuilder.Append('Á'); break;
                    case 0xc2: resultBuilder.Append('Â'); break;
                    case 0xc3: resultBuilder.Append('Ã'); break;
                    case 0xc7: resultBuilder.Append('Ç'); break;
                    case 0xc8: resultBuilder.Append('È'); break;
                    case 0xcf: resultBuilder.Append('Ï'); break;
                    case 0xd6: resultBuilder.Append('Ö'); break;
                    case 0xe1: resultBuilder.Append('á'); break;
                    case 0xe4: resultBuilder.Append('ä'); break;
                    case 0xe7: resultBuilder.Append('ç'); break;
                    case 0xe8: resultBuilder.Append('è'); break;
                    case 0xe9: resultBuilder.Append('é'); break;
                    case 0xea: resultBuilder.Append('ê'); break;
                    case 0xed: resultBuilder.Append('í'); break;
                    case 0xf3: resultBuilder.Append('ó'); break;
                    case 0xfa: resultBuilder.Append('ú'); break;
                    case 0xfc: resultBuilder.Append('ü'); break;
                    case 0xfd: resultBuilder.Append('ý'); break;
                    default:
                        throw new NotImplementedException(String.Format("0x{0:X2}", preprocessed[i]));
                }
            }

            return resultBuilder.ToString().ToCharArray();
        }
    }
}
