using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Web;

namespace DragonVideoPlayer
{
   
    public class title_generate
    {
        private static Dictionary<string, string> _mov3Map = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
            
    // ニュース・総合
    
                { "https://fujitv4.mov3.co/hls/fujitv.m3u8","フジテレビ" },
                 { "https://nhk4.mov3.co/hls/nhk.m3u8","NHK" },
                   { "https://tbs5.mov3.co/hls/tbs.m3u8","TBS" },
            { "https://ntv5.mov3.co/hls/ntv.m3u8", "日テレ" },
   

    { "https://ok.ru/videoembed/13523811311195", "TV東京" },
   { "https://ok.ru/videoembed/13247649750662", "TV朝日" },
{ "https://ok.ru/videoembed/13202753134285", "TokyoMX" },

};

        public static readonly Dictionary<string, string> _arva_ChannelMap = new Dictionary<string, string>
    {
        // 地上波 (関東)
        { "fuji_tv", "フジテレビ" },
        { "nhk_e", "NHK Eテレ" },
        { "nhk_g", "NHK総合" },
        { "nhk_g_%28subch%29", "NHK総合 (サブチャンネル)" },
        { "ntv", "日本テレビ" },
        { "tbs", "TBS" },
        { "tokyo_mx1", "TOKYO MX1" },
        { "tokyo_mx2", "TOKYO MX2" },
        { "tv_asahi", "テレビ朝日" },
        { "tv_tokyo", "テレビ東京" },

        // 地上波 (近畿)
        { "abc", "朝日放送テレビ" },
        { "kbs", "KBS京都" },
        { "kansai_tv", "関西テレビ" },
        { "mbs", "MBS毎日放送" },
        { "nhk_g_osaka", "NHK総合・大阪" },
        { "sun", "サンテレビ" },
        { "tv_osaka", "テレビ大阪" },
        { "ytv", "読売テレビ" },

        // BS
        { "bs_10", "bs10" }, // 旧スターチャンネル1
        { "bs_10_premium", "BS10premium" }, // 2024年以降の再編名称推測
        { "bs_asahi", "BS朝日" },
        { "bs_fuji", "BSフジ" },
        { "bs_ntv", "BS日テレ" },
        { "bs_tbs", "BS-TBS" },
        { "bs_tv_tokyo", "BSテレ東" },
        { "bs11", "BS11イレブン" },
        { "bs_12", "BS12 トゥエルビ" },
        { "nhk_bs", "NHK BS" },
        { "nhk_bs_%28subch%29", "NHK BS (サブチャンネル)" },
        { "nhk_bs4k", "NHK BSプレミアム4K" },
        { "jcom_bs", "J:テレ" },

        // CS / BS専門チャンネル
        { "animax", "アニマックス" },
        { "disney_channel", "ディズニー・チャンネル" },
        { "fishing_vision", "釣りビジョン" },
        { "green_channel", "グリーンチャンネル" },
        { "jsport_1", "J SPORTS 1" },
        { "jsport_2", "J SPORTS 2" },
        { "jsport_3", "J SPORTS 3" },
        { "jsport_4", "J SPORTS 4" },
        { "nihon_eiga_senmon", "日本映画専門チャンネル" },
        { "sky_a", "スカイA" },
        { "wowow_cinema", "WOWOWシネマ" },
        { "wowow_live", "WOWOWライブ" },
        { "wowow_plus", "WOWOWプラス" },
        { "wowow_prime", "WOWOWプライム" },
        { "at-x", "AT-X" },
        { "action_channel_%28axn%29", "アクションチャンネル" },
        { "animal_planet", "アニマルプラネット" },
        { "bbc_news", "BBCニュース" },
        { "cnnj", "CNNj" },
        { "cartoon_network", "カートゥーン ネットワーク" },
        { "channel_ginga", "チャンネル銀河" },
        { "dance_channel", "ダンスチャンネル" },
        { "discovery_channel", "ディスカバリーチャンネル" },
        { "disney_junior", "ディズニージュニア" },
        { "eisei_gekijo", "衛星劇場" },
        { "family_gekijyo", "ファミリー劇場" },
        { "fighting_tv_samurai", "FIGHTING TV サムライ" },
        { "fuji_tv_next", "フジテレビNEXT" },
        { "fuji_tv_one", "フジテレビONE" },
        { "fuji_tv_two", "フジテレビTWO" },
        { "gaora_sports", "GAORA SPORTS" },
        { "golf_network", "ゴルフネットワーク" },
        { "history", "ヒストリーチャンネル" },
        { "home_drama_channel", "ホームドラマチャンネル" },
        { "jidaigeki_senmon", "時代劇専門チャンネル" },
        { "kbs_world", "KBS World" },
        { "kntv", "KNTV" },
        { "kayo_pops", "歌謡ポップスチャンネル" },
        { "kids_station_tv", "キッズステーション" },
        { "lala_tv", "LaLa TV" },
        { "mtv", "MTV" },
        { "me-tele_next", "メ〜テレNEWS" }, // またはダンスch等のサブ扱い
        { "mnet", "Mnet" },
        { "mondo_tv", "MONDO TV" },
        { "movie_plus", "ムービープラス" },
        { "music_japan_tv", "ミュージック・ジャパンTV" },
        { "music_on_tv", "MUSIC ON! TV" },
        { "mystery_channel", "ミステリーチャンネル" },
        { "neco_ch", "映画・チャンネルNECO" },
        { "ntv_news24", "日テレNEWS24" },
        { "national_geographic_japan", "ナショナル ジオグラフィック" },
        { "nittele_g+", "日テレジータス" },
        { "nittele_plus", "日テレプラス" },
        { "pigoo_nsfw", "アイドル専用チャンネルPigoo" },
        { "shogi_channel", "囲碁・将棋チャンネル" },
        { "space_shower_tv", "スペースシャワーTV" },
        { "sport_live_plus", "スポーツライブ＋" },
        { "super_drama_tv", "スーパー! ドラマTV" },
        { "tbs_channel_1", "TBSチャンネル1" },
        { "tbs_channel_2", "TBSチャンネル2" },
        { "tbs_news", "TBS NEWS" },
        { "tv_asahi_channel_1", "テレ朝チャンネル1" },
        { "tv_asahi_channel_2", "テレ朝チャンネル2" },
        { "tabi_channel", "旅チャンネル" },
        { "takarazuka_sky_stage", "宝塚スカイステージ" },
        { "tetsudo_channel", "鉄道チャンネル" },
        { "the_cinema", "ザ・シネマ" },
        { "toei_channel", "東映チャンネル" },
        { "v_paradise_nsfw", "Vパラダイス" },
        { "weather_news", "ウェザーニュース" }
    };
        private static readonly Dictionary<string, string> _rakuten_ChannelNameMap = new Dictionary<string, string>
    {
        { "fishing", "釣り" },
        { "pet", "ペット" },
        { "movie2", "映画" },
        { "rchannelmensneco", "おとなの歓楽街 by MEN’S NECO" },
        { "rvariety", "セクシーエンタメチャンネル" },
        { "enka", "演歌・歌謡" },
        { "nagoyanext", "エンタメ～テレDEEP" },
        { "pachislo", "パチンコ・パチスロ" },
        { "mahjong", "麻雀" },
        { "shogi", "将棋" },
        { "igo-shogi", "囲碁・将棋ライト" },
        { "anime5", "手塚プロダクションTV" },
        { "shigekisports", "刺激ストロングSPORTS" },
        { "ntv-pro-wrestling", "日テレプロレスアーカイ部" },
        { "fitness", "ゴルフネットTV" },
        { "news2", "オリコンニュース" },
        { "news3", "共同通信News" },
        { "tandt", "鉄道・旅" },
        { "cplusi", "Lifetime／C+I" },
        { "movie", "ムビドラTV" },
        { "history", "ヒストリー" },
        { "rchannelbenesse", "しまじろうチャンネル" },
        { "kids-english", "キッズ・イングリッシュ" },
        { "shigeki", "刺激ストロング" },
        { "gaora", "GAORA" },
        { "fueltv", "FUEL TV" },
        { "news1", "ニュース1" },
        { "gravure", "グラビア" }  ,
            { "tokyomx", "TOKYO MX" }  
      
    };
        private static Dictionary<string, string> _abemaMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
    {
        // ニュース・総合
        { "30h-1", "30時間限界突破フェスチャンネル" },
          { "30h-2", "30時間限界突破フェスチャンネル2" },
            { "30h-3", "30時間限界突破フェスチャンネル3" },
         { "abema-news", "Abemaニュース" },
        { "news-plus", "Abemaニュースプラス" },
        { "abema-special", "Abemaスペシャル" },
        { "special-plus", "Abemaスペシャル2" },
        { "special-plus-7", "Abemaスペシャル3" }, // 以前の名称などの互換用

        // アニメ・専門枠
        { "re-zero", "Re:ゼロから始める異世界生活" },

          { "abema-anime", "Abemaアニメ" },
        { "abema-anime-2", "Abemaアニメ2" },
        { "abema-anime-3", "Abemaアニメ3" },
        { "anime-special-2", "アニメ・スペシャル2" },
        { "anime-live", "アニメライブ2" },
         { "anime-live2", "アニメライブ2" },
        { "chibimaruko", "ちびまる子ちゃん" },
        { "atashinchi", "あたしンち" },
        { "doraemon-special", "ドラえもん" },
        { "isekai-anime", "異世界アニメ" },
        { "isekai-anime-2", "異世界アニメ2" },
        { "isekai-anime-3", "異世界アニメ3" },
        { "pokemon-1", "ポケモン1" },
        { "pokemon-2", "ポケモン2" },
        { "conan", "名探偵コナン" },
        { "onepiece", "ワンピース" },
        { "family-anime-1", "ファミリーアニメ1" },
        { "family-anime-2", "ファミリーアニメ2" },
        { "lovecomedy-anime", "ラブコメアニメ" },
        { "dailylife-anime", "日常・コメディアニメ" },
        { "late-night-anime", "深夜アニメ" },
        { "80s-anime-1", "80年代アニメ" },
        { "90s-anime-1", "90年代アニメ" },
        { "00s-anime-1", "2000年代アニメ" },

        // ドラマ・アジア
        { "asia-drama", "アジア・ドラマ" },
        { "asia-drama-2", "アジア・ドラマ 2" },
        { "chinese-drama", "中国ドラマ" },
        { "asia-love-comedy", "アジア・ラブコメ" },
        { "asia-loveromance", "アジア・ロマンス" },
        { "asia-historical", "アジア時代劇" },
        { "k-world", "K WORLD" },
        { "drama", "ドラマ" },
        { "drama-2", "ドラマ2" },
        { "drama-3", "ドラマ3" },

        // スポーツ・エンタメ・趣味
        { "mahjong", "麻雀" },
        { "shogi", "将棋" },
        { "world-sports", "ワールドスポーツ" },
            { "world-sports-1", "ワールドスポーツ1" },
        { "motor-sport", "モータースポーツ" },
        { "sumo", "大相撲" },
        { "fighting-sports", "格闘" },
        { "hiphop", "HIPHOP" },
        { "commercial", "CM" },
        { "boatrace", "ボートレース" },
        { "keirin-auto", "競輪・オートレース" }
    };
        private static readonly Dictionary<string, string> _utako_channelMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
    {
        // 地上波 (Terrestrial)
        { "NHK_G", "NHK総合" },
        { "NHK_E", "NHK Eテレ" },
        { "Fuji_TV", "フジテレビ" },
        { "Tokyo_MX1", "TOKYO MX1" },
        { "Tokyo_MX2", "TOKYO MX2" },
        { "mbs", "MBS毎日放送" },
        { "abc", "ABCテレビ" },
        { "tvo", "テレビ大阪" },
        { "ytv", "読売テレビ" },
        { "kbs", "KBS京都" },
        { "suntv", "サンテレビ" },
        { "TBS", "TBS" },
        { "Nippon_TV", "日本テレビ" },
        { "kansaitv", "関西テレビ" },
        { "TV_Tokyo", "テレビ東京" },

        // BS Channels
        { "NHK_BS", "NHK BS" },
        { "bsntv", "BS日テレ" },
        { "bsasahi", "BS朝日" },
        { "bstvtokyo", "BSテレ東" },
        { "bsfuji", "BSフジ" },
        { "BS11", "BS11イレブン" },
        { "bsp4k", "NHK BSプレミアム4K" },
        { "wprime", "WOWOWプライム" },
        { "wcinema", "WOWOWシネマ" },
        { "wlive", "WOWOWライブ" },
        { "bs10_star", "スターチャンネル" },
        { "dlife", "Dlife " },

        // CS / Specialized Channels
        { "green", "グリーンチャンネル" },
        { "Animax", "アニマックス" },
        { "nihoneiga", "日本映画専門チャンネル" },
        { "gaora", "GAORA SPORTS" },
        { "AT-X", "AT-X" },
        { "spaceshower", "スペースシャワーTV" },
        { "mtv", "MTV" },
        { "kayopops", "歌謡ポップスチャンネル" },
        { "disneychan", "ディズニー・チャンネル" },
        { "cartoon_network", "カートゥーン ネットワーク" },
        { "mondo", "MONDO TV" },
        { "musicon", "MUSIC ON! TV" },
        { "tbsch1", "TBSチャンネル1" },
        { "tbsch2", "TBSチャンネル2" },
        { "ex_ch1", "テレ朝チャンネル1" },
        { "ex_ch2", "テレ朝チャンネル2" },
        { "fuji_one", "フジテレビONE" },
        { "fuji_two", "フジテレビTWO" },
        { "fuji_next", "フジテレビNEXT" },
        { "fighting_tv", "FIGHTING TV サムライ" },
        { "entermei_tele", "エンタメ テレ" },
        { "sport_live_plus", "スポーツライブ＋" },
        { "gingach", "チャンネル銀河" },
        { "pigoo", "アイドル専門チャンネルPigoo" },
        { "kids_station", "キッズステーション" },
        { "v_paradise", "Vパラダイス" },
        { "mnet", "Mnet" },
        { "js1", "J SPORTS 1" },
        { "js2", "J SPORTS 2" },
        { "js3", "J SPORTS 3" },
        { "js4", "J SPORTS 4" },
        { "neco", "映画・チャンネルNECO" },
        { "ntvgplus", "日テレジータス" },
        { "the_cinema", "ザ・シネマ" },
        { "tabi", "旅チャンネル" }
    };
        private static Dictionary<string, string> _primehome_channelMap = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
    // CS Channels
    { "CS04", "時代劇専門チャンネル" },
    { "cs05", "ホームドラマチャンネル" },
    { "cs12", "旅チャンネル" },
    { "cs01", "スカイA" }, // ※Channel Gingaも同じID
    { "cs17", "GAORA SPORTS" },
    { "cs03", "ゴルフネットワークk" },
    { "cs02", "日テレジータス" },
    { "cs21", "Mondo TV" },
    { "cs08", "ディスカバリーチャンネル" },
    { "cs06", "Music Japan TV" },
    { "cs23", "ディズニージュニア" },
    { "cs24", "アニマルプラネット" },
    { "cs09", "ヒストリーチャンネル" },
    { "cs13", "歌謡ポップスチャンネル" },
    { "cs18", "MTV" },
    { "cs19", "LaLa TV" },
    { "cs28", "宝塚歌劇専門チャンネル" },
    { "cs07", "キッズステーション" },
    { "cs25", "カートゥーン ネットワーク" },
    { "cs10", "ナショナルジオグラフィック" },
    { "cs16", "CNNj" },
    { "cs15", "BBC News" },
    { "cs11", "TBS News" },
    { "cs27", "東映チャンネル" },
    { "cs22", "衛星劇場" },
    { "cs20", "ファミリー劇場" },
    { "cs14", "ムービープラス" },
    { "cs26", "フジテレビNext" },
         { "cs29", "チャンネル銀河" },

    // BS Channels

    { "bs15", "アニマックス" },
    { "bs12", "WOWOWプライム" },
    { "bs07", "WOWOWシネマ" }, // ※WOWOW Cinemaも同じID
    { "bs08", "スターチャンネル2" },
    { "bs18", "JSports 1" },
    { "bs19", "JSports 2" },
    { "bs21", "JSports 3" },
    { "bs22", "JSports 4" },
    { "bs25", "釣りビジョン" },
    { "bs11", "NHK BS" },
    { "bs02", "BS日テレ" },
    { "bs03", "BS朝日" },
    { "bs04", "BS TBS" },
    { "bs05", "BS TV東京" },
    { "bs06", "BSフジ" },
    { "bs01", "NHK BS4K" },
      { "bs14", "グリーンチャンネル" },
  { "bs20", "WOWOWライブ" },
  { "bs16", "日本映画専門チャンネル" },
  { "bs23", "NHK BS4K" },
  { "bs24", "ディズニー・チャンネル" },
  { "bs26", "スペースシャワーTV" },
  { "bs27", "スターチャンネル2" },
   { "bs28", "スターチャンネル3" },
         { "bs31", "BS 松竹東急" },

    // Terrestrial Channels (HD/SD)

    { "gx01", "MBS" },
    { "gx02", "朝日放送" },
 { "gx03", "関西TV" },
 { "gx04", "読売TV" },
 { "gx05", "TV大阪" },
 { "gx06", "NHK G 大阪" },
 { "gx07", "サンテレビ" },
 { "gx08", "TOKYO MX1" },
    { "gd01", "NHK G" },
    { "gd02", "NHK E" },
    { "gd03", "日テレ" },
    { "gd04", "TBS" },
    { "gd05", "フジテレビ" },
    { "gd06", "TV朝日" },
    { "gd07", "TV東京" },
    { "gd08", "TOKYO MX1" }
};

        public static string Get_primehome(string url)
        {
            var uri = new Uri(url);

            var query = HttpUtility.ParseQueryString(uri.Query);

            string cid = query["cid"];

            if (cid == null)
                return url;

            if (_primehome_channelMap.TryGetValue(cid, out string region))

                return region;

            return cid;
        }
        /// <summary>
        /// 英文IDから日本語のチャンネル名を取得します。
        /// 見つからない場合は空文字を返します。
        /// </summary>
        /// <param name="channelId">チャンネルの英文ID (例: "NHK_G")</param>
        /// <returns>日本語名</returns>
        public static string Get_UtakoMoe(string url)
        {
            String channe_name = Get_SegmentsName(url, 1);


            if (string.IsNullOrEmpty(channe_name)) return channe_name;

            if (_utako_channelMap.TryGetValue(channe_name, out string japaneseName))
            {


                return japaneseName;
            }

            return channe_name;
        }
        public static string Get_arva_netgen(string url)
        {
            String channe_name = Get_SegmentsName(url, 3);
            Debug.WriteLine(channe_name);

            if (string.IsNullOrEmpty(channe_name)) return channe_name;

            if (_arva_ChannelMap.TryGetValue(channe_name, out string japaneseName))
            {


                return japaneseName;
            }

            return channe_name;
        }
        public static string Get_mov3(string channe_name)
        {


            if (string.IsNullOrEmpty(channe_name)) return channe_name;

            if (_mov3Map.TryGetValue(channe_name, out string japaneseName))
            {


                return japaneseName;
            }

            return channe_name;
        }
        public static string Get_abema(string url, int segment)
        {
            String channe_name = Get_SegmentsName(url, segment);

         
            if (string.IsNullOrEmpty(channe_name)) return channe_name;

            if (_abemaMap.TryGetValue(channe_name, out string japaneseName))
            {
                return japaneseName;
            }

            return channe_name;
        }
        public static string GetName_rakuten(string url, int count)
        {
            String result = "";
            try
            {
                var uri = new Uri(url);

                if (uri.Segments.Length >= count)
                    result = uri.Segments[count].Trim('/');
                result = result.Replace("amg01287-rakutentvjapan-", "");
                result = result.Replace("-cmaf-rakutenjp", "");
                result = result.Replace("cmaf-rakutenjp", "");
                result = result.Replace("-rakutenjp", "");
                result = result.Replace("-cmaf1", "");
                result = result.Replace("cmaf", "");
                result = result.Replace("-hls", "");
                result = result.Replace("hls", "");
                result = result.Replace("amg01074-", "");
                result = result.Replace("-fueltvjp", "");
                Debug.WriteLine("楽天"+result);
                if (_rakuten_ChannelNameMap.TryGetValue(result, out string region))
                    Debug.WriteLine("楽天" + region);
                return region;


                
            }
            catch (System.Exception ex)
            {

                Debug.WriteLine(ex.Message + ex.StackTrace);
            }
            return result;
        }
        public static string Get_SegmentsName(string url, int count)
        {
            try
            {
                var uri = new Uri(url);

                if (uri.Segments.Length >= count)
                    return uri.Segments[count].Trim('/');

            }
            catch (System.Exception ex)
            {

                Debug.WriteLine(ex.Message + ex.StackTrace);
            }
            return "";
        }
     
        public static string GetRadikoStation(string url)
        {
            var uri = new Uri(url);

            string fragment = uri.Fragment; // #!/live/GBS

            if (fragment.StartsWith("#!/live/"))
                return fragment.Replace("#!/live/", "");

            return "";
        }
    }


}
