<?php
	require_once dirname(__FILE__)."/dal/registryDAL.php";
	class registry {
		private static ?self $instance = null;

		private $settings = [
		// 內頁模組設定
			"articlePageSize",			// 每頁數量設置 文章
			"productPageSize",			// 每頁數量設置 產品資訊
			"newsPageSize",				// 每頁數量設置 最新消息
			"faqPageSize",				// 每頁數量設置 問與答
			"bookPageSize",				// 每頁數量設置 影音相本
			"sideNavInfo",				// 側欄選單標題 網站資訊
			"sideNavProduct",			// 側欄選單標題 產品
			"sideNavPhoto",				// 側欄選單標題 小廣告
			"sideExtraInfo",			// 側欄選單標題 額外資訊
			// 網路資源設置
			"lineTitle",				// LINE 標題
			"lineTitleShow",			// LINE 標題 顯示在聯絡我們頁面
			"lineQRCode",				// LINE QRCode
			"LineOpen",					// Line 分享開關
			// Facebook 設置
			"fbFansURL",				// 臉書粉絲團 網址
			"fbFansFriendFace",			// 臉書粉絲團 臉書模組 好友頭像
			"fbFansCoverPhoto",			// 臉書粉絲團 臉書模組 封面
			"fbFansPagePost",			// 臉書粉絲團 臉書模組 頁面內容
			"fbFansSidePageShow",		// 臉書粉絲團 內頁顯示
			"fbFansSidePageType",		// 臉書粉絲團 內頁顯示樣式
			"fbFansLOGO",				// 臉書粉絲團 內頁自訂LOGO
			// Google Map 設置
			"googlemapAddress",			// Google MAP 地址
			"googlemapIndex",			// Google MAP 首頁顯示
			"googlemapSidePage",		// Google MAP 側邊顯示
			"googlemapSidePageShow",	// Google MAP 側邊顯示(內頁選擇是否顯示)
			"googlemapMain",			// Google MAP 聯絡表單顯示
			"googlemapISStyle",			// Google MAP 是否使用樣式
			"googlemapLat",				// Google MAP 緯度
			"googlemapLng",				// Google MAP 經度
			"googlemapIcon",			// Google MAP 自訂標示圖
			"googlemapStyles",			// Google MAP 地圖樣式
			"googlemapApiKey",			// Google MAP 地圖Api金鑰
			// Youtube 設置
			"youtubeURL",				// Youtube 分享網址
			"youtubeSidePage",			// Youtube 內頁顯示
			"youtubeSidePageShow",		// Youtube 內頁顯示(內頁選擇是否顯示)
			"youtubeIndex",				// Youtube 顯示
			"youtubeType",				// Youtube 顯示樣式
			"youtubeRel",				// Youtube 顯示推薦影片
			"youtubeAutoPlay",			// Youtube 自動播放
			"youtubeMute",				// Youtube 靜音播放
			"youtubeLoop",				// Youtube 重複播放
			// GA、GT
			"headHTML",					// Google Analytics 原始碼
			"bodyTopHTML",				// Google Tag Manager 原始碼
			// 首頁設置
			"indexAboutTitle1",			// 關於我們 標題
			"indexAboutTitle2",			// 關於我們 副標題
			"indexAboutLink",			// 關於我們 超連結
			"indexAboutLinkT",			// 關於我們 連結文字
			"indexAboutIntroduction",	// 關於我們 簡介
			"indexAboutImage",			// 關於我們 圖片
			"indexAboutShow",			// 關於我們 首頁顯示
			"indexNTitle",				// 最新消息 主標題
			"indexNNO",					// 最新消息 顯示數量
			"indexNMLink",				// 最新消息 查看更多連結
			"indexNMLinkTitle",			// 最新消息 查看更多標題
			"indexNBImg",				// 最新消息 背景圖
			"indexNBColor",				// 最新消息 背景底色
			"indexNShow",				// 最新消息 首頁顯示
			"indexPTitle",				// 產品設置 主標題
			"indexPNO",					// 產品設置 顯示數量
			"indexPMLink",				// 產品設置 查看更多連結
			"indexPMLinkTitle",			// 產品設置 查看更多標題
			"indexPShow",				// 產品設置 首頁顯示
			"indexPBImg",				// 產品設置 背景圖
			"indexPBColor",				// 產品設置 背景底色
			"indexBTitle",				// 相本設置 主標題
			"indexBNO",					// 相本設置 顯示數量
			"indexBMLink",				// 相本設置 查看更多連結
			"indexBMLinkTitle",			// 相本設置 查看更多標題
			"indexBShow",				// 相本設置 首頁顯示
			"indexBBImg",				// 相本設置 背景圖
			"indexBBColor",				// 相本設置 背景底色
			// 系統
			"ModifiedTime",				// 最後更新時間
			// 首頁廣告設置
			"pageBannerType",			// 橫幅廣告設置 內頁廣告
			"pictureVideo",				// 橫幅廣告設置 影片連結
			// 小廣告設置
			"smallPictureShow",			// 小廣告設置 內頁廣告
			// 側邊商品分類列表設置
			"categorySidePageShow",		// 側邊商品分類列表設置 側邊顯示(內頁選擇是否顯示)
			// 基本設置
			"isPayPage",				// 進階設定 快速線上付款
			"isCustomer",				// 進階設定 會員功能
			"isShopCar",				// 進階設定 購物車功能
			"isInvoice",				// 進階設定 電子發票功能
			"isScore",					// 進階設定 評分功能
			"istwsms",					// 進階設定 台灣簡訊
			"bannerMaximum",			// 進階設定 banner上限
			"isAnalyze",				// 進階設定 瀏覽人數分析
			"webName",					// 網站資訊 網站名稱
			"webEmail",					// 網站資訊 客服信箱
			"webEmailisShow",			// 網站資訊 客服信箱 顯示在聯絡我們頁面
			"webAddress",				// 網站資訊 聯絡地址
			"webAddressisShow",			// 網站資訊 聯絡地址 顯示在聯絡我們頁面
			"webPhone",					// 網站資訊 聯絡電話
			"webPhoneisShow",			// 網站資訊 聯絡電話 顯示在聯絡我們頁面
			"webMobile",				// 網站資訊 聯絡手機
			"webMobileShow",			// 網站資訊 聯絡手機 顯示在聯絡我們頁面
			"webFax",					// 網站資訊 聯絡傳真
			"webFaxisShow",				// 網站資訊 聯絡傳真 顯示在聯絡我們頁面
			"webType",					// 網站設定 網站類型
			"ShowPrice",				// 網站設定 顯示產品價格
			"transPrice",				// 網站設定 網站類型-簡易型購物網站 運費
			"transFreePrice",			// 網站設定 網站類型-簡易型購物網站 免運金額
			"webLinkType",				// 網站設定 網址形式
			"systemEmail1",				// 網站設定 系統信箱1
			"systemEmail2",				// 網站設定 系統信箱2
			"systemEmail3",				// 網站設定 系統信箱3
			"systemEmail4",				// 網站設定 系統信箱4
			"systemEmail5",				// 網站設定 系統信箱5
			"sendMailType",				// 寄件信箱設定 信箱類型
			"sendMailAddress",			// 寄件信箱設定 信箱
			"sendMailPassword",			// 寄件信箱設定 密碼
			"sendMailHost",				// 寄件信箱設定 主機位置
			"sendMailPort",				// 寄件信箱設定 通訊埠
			"sendMailSMTPSecure",		// 寄件信箱設定 加密方式
			"sendMailSMTPAuth",			// 寄件信箱設定 安全驗證
			"ipLimit1",					// 前台IP限制
			"ipBlackList1",				// 前台黑名單IP
			"ipWhiteList1",				// 前台白名單IP
			"ipLimit2",					// 後台IP限制
			"ipBlackList2",				// 後台黑名單IP
			"ipWhiteList2",				// 後台白名單IP
			// SEO設定
			"webTitle",					// SEO資訊 網站標題
			"webKeyword",				// SEO資訊 網站關鍵字
			"webDescription",			// SEO資訊 網站描述
			"webH1",					// SEO資訊 H1標題
			"webMarquee",				// SEO資訊 跑馬燈
			"webCopy",					// SEO資訊 版權宣告
			"webFooter",				// SEO資訊 頁腳設定-蘋果
			"twipLimit",				// SEO資訊 台灣IP限制
			"sitemapType",				// SEO資訊 網站地圖樣式
			"webSeoSearch",				// SEO資訊 網站結構化資料類型
			"indexBestRating",			// SEO資訊 首頁結構化資料設置 評分允許的最高值
			"indexRatingValue",			// SEO資訊 首頁結構化資料設置 內容評分
			"indexRatingCount",			// SEO資訊 首頁結構化資料設置 總評分數
			"indexReviewCount",			// SEO資訊 首頁結構化資料設置 總評論數
			"indexIsShowJason",			// SEO資訊 首頁結構化資料設置 是否開啟結構化資料
			"indexIsShowStars",			// SEO資訊 首頁結構化資料設置 是否再前台顯示星級與評論
			"contactBestRating",		// SEO資訊 聯絡我們結構化資料設置 評分允許的最高值
			"contactRatingValue",		// SEO資訊 聯絡我們結構化資料設置 內容評分
			"contactRatingCount",		// SEO資訊 聯絡我們結構化資料設置 總評分數
			"contactReviewCount",		// SEO資訊 聯絡我們結構化資料設置 總評論數
			"contactIsShowJason",		// SEO資訊 聯絡我們結構化資料設置 是否開啟結構化資料
			"contactIsShowStars",		// SEO資訊 聯絡我們結構化資料設置 是否再前台顯示星級與評論
			"orderBestRating",			// SEO資訊 購物車結構化資料設置 評分允許的最高值
			"orderRatingValue",			// SEO資訊 購物車結構化資料設置 內容評分
			"orderRatingCount",			// SEO資訊 購物車結構化資料設置 總評分數
			"orderReviewCount",			// SEO資訊 購物車結構化資料設置 總評論數
			"orderIsShowJason",			// SEO資訊 購物車結構化資料設置 是否開啟結構化資料
			"orderIsShowStars",			// SEO資訊 購物車結構化資料設置 是否再前台顯示星級與評論
			"articleTitle",				// 特殊內頁SEO設定 文章總表標題
			"articleKeyword",			// 特殊內頁SEO設定 文章總表關鍵字
			"articleDescription",		// 特殊內頁SEO設定 文章總表描述
			"newsTitle",				// 特殊內頁SEO設定 最新消息總表標題
			"newsKeyword",				// 特殊內頁SEO設定 最新消息總表關鍵字
			"newsDescription",			// 特殊內頁SEO設定 最新消息總表描述
			"faqTitle",					// 特殊內頁SEO設定 問與答總表標題
			"faqKeyword",				// 特殊內頁SEO設定 問與答總表關鍵字
			"faqDescription",			// 特殊內頁SEO設定 問與答總表描述
			"productTitle",				// 特殊內頁SEO設定 商品總表標題
			"productKeyword",			// 特殊內頁SEO設定 商品總表關鍵字
			"productDescription",		// 特殊內頁SEO設定 商品總表描述
			"bookTitle",				// 特殊內頁SEO設定 相本總表標題
			"bookKeyword",				// 特殊內頁SEO設定 相本總表關鍵字
			"bookDescription",			// 特殊內頁SEO設定 相本總表描述
			"contactTitle",				// 特殊內頁SEO設定 聯絡我們總表標題
			"contactKeyword",			// 特殊內頁SEO設定 聯絡我們總表關鍵字
			"contactDescription",		// 特殊內頁SEO設定 聯絡我們總表描述
			"orderTitle",				// 特殊內頁SEO設定 簡易購物車總表標題
			"orderKeyword",				// 特殊內頁SEO設定 簡易購物車總表關鍵字
			"orderDescription",			// 特殊內頁SEO設定 簡易購物車總表描述
			"memberTitle",				// 特殊內頁SEO設定 會員中心標題
			"memberKeyword",			// 特殊內頁SEO設定 會員中心關鍵字
			"memberDescription",		// 特殊內頁SEO設定 會員中心描述
			// 跳轉設置
			"webJumpType",				// 跳轉設置 跳轉類型
			"webJumpImage",				// 跳轉設置 跳轉圖片
			"webJumpLink",				// 跳轉設置 跳轉連結
			// 版型設置
			"webTemplates",				// 版型路徑目錄
			// 聯絡我們設置
			"sideNavShow",				// 聯絡我們資訊 內頁顯示
			"ContactName",				// 聯絡我們資訊 聯絡我們標題
			"webContact",				// 聯絡我們資訊 給客戶的話		
			// 線上訂單設置
			"OrderName",				// 聯絡我們資訊 聯絡我們標題
			"webOrder",					// 線上訂單資訊 線上購物說明
			// 社群分享設置
			"OGTitle",
			"OGDescription",
			"OGImage",
			// Line登入設置
			"upLineTasonTime",
			// api設定
			"merchantID",				// api設定 藍新金流 商店代號
			"hashKey",					// api設定 藍新金流 HashKey
			"hashIV",					// api設定 藍新金流 HashIV
			"ecpay_merchantID",			// api設定 綠界金流 商店代號
			"ecpay_hashKey",			// api設定 綠界金流 HashKey
			"ecpay_hashIV",				// api設定 綠界金流 HashIV
			"pchomepay_appId",			// api設定 PCHome金流 app_id
			"pchomepay_secretCode",		// api設定 PCHome金流 secret code
			"twsmsuaer",				// api設定 台灣簡訊帳號
			"twsmspass",				// api設定 台灣簡訊密碼
			// 分類列表模式設定
			"categoryListMode",
			// 系統
			"Version",					// 系統 網站版本號
			"loginType",				// 系統 登入方式
			"isGoogleLogin",			// 系統 Google登入
			"isFbLogin",				// 系統 Fb登入
			"isLineLogin",				// 系統 Line登入
		];

		private $data = []; //  使用一個數組來儲存屬性值

		public function __construct() {
			foreach ($this->settings as $setting) {
				$this->data[$setting] = $this->getRegistryValue($setting);
			}
		}

		public function __get($name) {
			if (array_key_exists($name, $this->data)) return $this->data[$name];
			return null;
		}

		public function __set($name, $value) {
			if (array_key_exists($name, $this->data)) $this->data[$name] = $value;
		}

		public static function createInstance(): self {
			if (self::$instance === null) self::$instance = new self();
			return self::$instance;
		}
	
		public function getRegistryValue(string $name): mixed {
			return registryDAL::getRegistryValue($name);
		}
	}
?>