from __future__ import annotations

import argparse
import json
import os
import time
from pathlib import Path
from urllib.parse import quote
from urllib.request import Request, urlopen

import mysql.connector


ROOT_DIR = Path(__file__).resolve().parents[1]
DEFAULT_ENV_PATH = ROOT_DIR / ".env"


NAME_TRANSLATIONS = {
    "몬스테라": {"en": "Monstera", "ja": "モンステラ", "zh": "龟背竹"},
    "스투키": {"en": "Snake Plant", "ja": "サンスベリア", "zh": "虎尾兰"},
    "포토스": {"en": "Pothos", "ja": "ポトス", "zh": "绿萝"},
    "선인장": {"en": "Cactus", "ja": "サボテン", "zh": "仙人掌"},
    "허브": {"en": "Herbs", "ja": "ハーブ", "zh": "香草"},
    "고무나무": {"en": "Rubber Plant", "ja": "ゴムの木", "zh": "橡皮树"},
    "스파티필름": {"en": "Peace Lily", "ja": "スパティフィラム", "zh": "白掌"},
    "금전수": {"en": "ZZ Plant", "ja": "ザミオクルカス", "zh": "雪铁芋"},
    "아레카야자": {"en": "Areca Palm", "ja": "アレカヤシ", "zh": "散尾葵"},
    "테이블야자": {"en": "Parlor Palm", "ja": "テーブルヤシ", "zh": "袖珍椰子"},
    "아이비": {"en": "English Ivy", "ja": "アイビー", "zh": "常春藤"},
    "안스리움": {"en": "Anthurium", "ja": "アンスリウム", "zh": "花烛"},
    "필로덴드론": {"en": "Philodendron", "ja": "フィロデンドロン", "zh": "喜林芋"},
    "알로카시아": {"en": "Alocasia", "ja": "アロカシア", "zh": "海芋"},
    "페퍼로미아": {"en": "Peperomia", "ja": "ペペロミア", "zh": "豆瓣绿"},
    "마란타": {"en": "Prayer Plant", "ja": "マランタ", "zh": "竹芋"},
    "칼라데아": {"en": "Calathea", "ja": "カラテア", "zh": "竹芋属"},
    "디펜바키아": {"en": "Dieffenbachia", "ja": "ディフェンバキア", "zh": "花叶万年青"},
    "홍콩야자": {"en": "Dwarf Umbrella Tree", "ja": "シェフレラ", "zh": "鹅掌柴"},
    "드라세나 마지나타": {"en": "Madagascar Dragon Tree", "ja": "ドラセナ・マルギナータ", "zh": "龙血树"},
    "행운목": {"en": "Corn Plant", "ja": "幸福の木", "zh": "巴西木"},
    "유카": {"en": "Yucca Cane", "ja": "ユッカ", "zh": "丝兰"},
    "보스턴고사리": {"en": "Boston Fern", "ja": "ボストンファーン", "zh": "波士顿蕨"},
    "아글라오네마": {"en": "Aglaonema", "ja": "アグラオネマ", "zh": "广东万年青"},
    "싱고니움": {"en": "Arrowhead Vine", "ja": "シンゴニウム", "zh": "合果芋"},
    "호야": {"en": "Wax Plant", "ja": "ホヤ", "zh": "球兰"},
    "제라늄": {"en": "Geranium", "ja": "ゼラニウム", "zh": "天竺葵"},
    "베고니아": {"en": "Begonia", "ja": "ベゴニア", "zh": "秋海棠"},
    "시클라멘": {"en": "Cyclamen", "ja": "シクラメン", "zh": "仙客来"},
    "호접란": {"en": "Moth Orchid", "ja": "胡蝶蘭", "zh": "蝴蝶兰"},
    "덴드로비움": {"en": "Dendrobium", "ja": "デンドロビウム", "zh": "石斛兰"},
    "카틀레야": {"en": "Cattleya", "ja": "カトレア", "zh": "卡特兰"},
    "파키라": {"en": "Money Tree", "ja": "パキラ", "zh": "发财树"},
    "올리브나무": {"en": "Olive Tree", "ja": "オリーブ", "zh": "橄榄树"},
    "로즈마리": {"en": "Rosemary", "ja": "ローズマリー", "zh": "迷迭香"},
    "라벤더": {"en": "Lavender", "ja": "ラベンダー", "zh": "薰衣草"},
    "민트": {"en": "Mint", "ja": "ミント", "zh": "薄荷"},
    "바질": {"en": "Basil", "ja": "バジル", "zh": "罗勒"},
    "타임": {"en": "Thyme", "ja": "タイム", "zh": "百里香"},
    "오레가노": {"en": "Oregano", "ja": "オレガノ", "zh": "牛至"},
    "세이지": {"en": "Sage", "ja": "セージ", "zh": "鼠尾草"},
    "파슬리": {"en": "Parsley", "ja": "パセリ", "zh": "欧芹"},
    "레몬밤": {"en": "Lemon Balm", "ja": "レモンバーム", "zh": "柠檬香蜂草"},
    "차이브": {"en": "Chives", "ja": "チャイブ", "zh": "细香葱"},
    "딜": {"en": "Dill", "ja": "ディル", "zh": "莳萝"},
    "고수": {"en": "Cilantro", "ja": "パクチー", "zh": "香菜"},
    "펜넬": {"en": "Fennel", "ja": "フェンネル", "zh": "茴香"},
    "알로에": {"en": "Aloe Vera", "ja": "アロエベラ", "zh": "芦荟"},
    "에케베리아": {"en": "Echeveria", "ja": "エケベリア", "zh": "拟石莲花"},
    "세덤": {"en": "Sedum", "ja": "セダム", "zh": "景天"},
    "염자": {"en": "Jade Plant", "ja": "金のなる木", "zh": "玉树"},
    "하월시아": {"en": "Haworthia", "ja": "ハオルチア", "zh": "十二卷"},
    "리톱스": {"en": "Living Stones", "ja": "リトープス", "zh": "生石花"},
    "아가베": {"en": "Agave", "ja": "アガベ", "zh": "龙舌兰"},
    "목걸이식물": {"en": "String of Pearls", "ja": "グリーンネックレス", "zh": "珍珠吊兰"},
    "칼랑코에": {"en": "Flaming Katy", "ja": "カランコエ", "zh": "长寿花"},
    "틸란드시아": {"en": "Air Plant", "ja": "エアプランツ", "zh": "铁兰"},
    "구즈마니아": {"en": "Guzmania", "ja": "グズマニア", "zh": "丽穗凤梨"},
    "에크메아": {"en": "Aechmea", "ja": "エクメア", "zh": "姬凤梨"},
    "부겐빌레아": {"en": "Bougainvillea", "ja": "ブーゲンビリア", "zh": "三角梅"},
    "히비스커스": {"en": "Hibiscus", "ja": "ハイビスカス", "zh": "扶桑花"},
    "치자나무": {"en": "Gardenia", "ja": "クチナシ", "zh": "栀子花"},
    "동백나무": {"en": "Camellia", "ja": "ツバキ", "zh": "山茶"},
    "철쭉": {"en": "Azalea", "ja": "ツツジ", "zh": "杜鹃花"},
    "수국": {"en": "Hydrangea", "ja": "アジサイ", "zh": "绣球花"},
    "자스민": {"en": "Jasmine", "ja": "ジャスミン", "zh": "茉莉"},
    "월계수": {"en": "Bay Laurel", "ja": "月桂樹", "zh": "月桂"},
    "무화과나무": {"en": "Fig Tree", "ja": "イチジク", "zh": "无花果树"},
    "벤자민": {"en": "Weeping Fig", "ja": "ベンジャミン", "zh": "垂叶榕"},
    "떡갈잎고무나무": {"en": "Fiddle Leaf Fig", "ja": "カシワバゴムノキ", "zh": "琴叶榕"},
    "벵갈고무나무": {"en": "Bengal Rubber Tree", "ja": "ベンガルボダイジュ", "zh": "孟加拉榕"},
    "커피나무": {"en": "Coffee Plant", "ja": "コーヒーノキ", "zh": "咖啡树"},
    "레몬나무": {"en": "Lemon Tree", "ja": "レモン", "zh": "柠檬树"},
    "블루베리": {"en": "Blueberry", "ja": "ブルーベリー", "zh": "蓝莓"},
    "딸기": {"en": "Strawberry", "ja": "イチゴ", "zh": "草莓"},
    "석류나무": {"en": "Pomegranate", "ja": "ザクロ", "zh": "石榴"},
    "아보카도": {"en": "Avocado", "ja": "アボカド", "zh": "牛油果"},
    "피레아": {"en": "Chinese Money Plant", "ja": "ピレア・ペペロミオイデス", "zh": "镜面草"},
    "트라데스칸티아": {"en": "Wandering Dude", "ja": "トラデスカンティア", "zh": "吊竹梅"},
    "아스플레니움": {"en": "Bird's Nest Fern", "ja": "アスプレニウム", "zh": "鸟巢蕨"},
    "크로톤": {"en": "Croton", "ja": "クロトン", "zh": "变叶木"},
    "콜레우스": {"en": "Coleus", "ja": "コリウス", "zh": "彩叶草"},
    "핏토니아": {"en": "Nerve Plant", "ja": "フィットニア", "zh": "网纹草"},
    "폴리시아스": {"en": "Ming Aralia", "ja": "ポリシャス", "zh": "福禄桐"},
    "클루시아": {"en": "Autograph Tree", "ja": "クルシア", "zh": "签名树"},
    "네펜데스": {"en": "Tropical Pitcher Plant", "ja": "ネペンテス", "zh": "猪笼草"},
    "사라세니아": {"en": "Pitcher Plant", "ja": "サラセニア", "zh": "瓶子草"},
    "파리지옥": {"en": "Venus Flytrap", "ja": "ハエトリソウ", "zh": "捕蝇草"},
    "드로세라": {"en": "Cape Sundew", "ja": "ドロセラ", "zh": "茅膏菜"},
    "옥살리스": {"en": "Purple Shamrock", "ja": "オキザリス", "zh": "紫叶酢浆草"},
    "시서스": {"en": "Grape Ivy", "ja": "シッサス", "zh": "白粉藤"},
    "산호수": {"en": "Coral Berry", "ja": "アルディシア", "zh": "朱砂根"},
    "만세선인장": {"en": "Bunny Ears Cactus", "ja": "バニーカクタス", "zh": "兔耳掌"},
    "게발선인장": {"en": "Thanksgiving Cactus", "ja": "シャコバサボテン", "zh": "蟹爪兰"},
    "만데빌라": {"en": "Mandevilla", "ja": "マンデビラ", "zh": "飘香藤"},
    "페튜니아": {"en": "Petunia", "ja": "ペチュニア", "zh": "矮牵牛"},
    "팬지": {"en": "Pansy", "ja": "パンジー", "zh": "三色堇"},
    "프리지아": {"en": "Freesia", "ja": "フリージア", "zh": "小苍兰"},
    "튤립": {"en": "Tulip", "ja": "チューリップ", "zh": "郁金香"},
    "백합": {"en": "Lily", "ja": "ユリ", "zh": "百合"},
    "카네이션": {"en": "Carnation", "ja": "カーネーション", "zh": "康乃馨"},
    "국화": {"en": "Chrysanthemum", "ja": "キク", "zh": "菊花"},
    "금잔화": {"en": "Pot Marigold", "ja": "キンセンカ", "zh": "金盏花"},
    "데이지": {"en": "Daisy", "ja": "デイジー", "zh": "雏菊"},
    "거베라": {"en": "Gerbera", "ja": "ガーベラ", "zh": "非洲菊"},
    "라넌큘러스": {"en": "Persian Buttercup", "ja": "ラナンキュラス", "zh": "花毛茛"},
    "스토크": {"en": "Stock", "ja": "ストック", "zh": "紫罗兰"},
    "금어초": {"en": "Snapdragon", "ja": "キンギョソウ", "zh": "金鱼草"},
    "안개꽃": {"en": "Baby's Breath", "ja": "カスミソウ", "zh": "满天星"},
    "알스트로메리아": {"en": "Peruvian Lily", "ja": "アルストロメリア", "zh": "六出花"},
    "봉선화": {"en": "Busy Lizzie", "ja": "ホウセンカ", "zh": "凤仙花"},
    "뉴기니 임파첸스": {"en": "New Guinea Impatiens", "ja": "ニューギニア・インパチェンス", "zh": "新几内亚凤仙"},
    "토레니아": {"en": "Torenia", "ja": "トレニア", "zh": "夏堇"},
    "로벨리아": {"en": "Lobelia", "ja": "ロベリア", "zh": "半边莲"},
    "아네모네": {"en": "Poppy Anemone", "ja": "アネモネ", "zh": "银莲花"},
    "제비꽃": {"en": "Sweet Violet", "ja": "ニオイスミレ", "zh": "香堇菜"},
}

CARE_OVERRIDES = {
    "몬스테라": {"sunlight_ko": "밝은 간접광", "tip_ko": "겉흙 3~5cm가 마르면 물을 흠뻑 주고, 잎에 먼지가 쌓이지 않게 가끔 닦아주세요."},
    "스투키": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 완전히 말랐을 때만 물을 주고, 겨울에는 물주기 간격을 더 길게 잡아주세요."},
    "포토스": {"sunlight_ko": "간접광", "tip_ko": "겉흙이 마르면 물을 주고, 줄기가 웃자라면 밝은 곳으로 옮겨 관리해주세요."},
    "선인장": {"sunlight_ko": "직사광 가능", "tip_ko": "흙이 완전히 마른 뒤 물을 주고, 물 준 뒤에는 받침 물이 남지 않게 바로 비워주세요."},
    "허브": {"sunlight_ko": "햇빛 필요", "tip_ko": "하루 몇 시간 이상 햇빛을 확보하고, 흙이 너무 마르기 전에 가볍게 촉촉함을 유지해주세요."},
    "고무나무": {"sunlight_ko": "밝은 간접광", "tip_ko": "겉흙이 마르면 물을 주고, 잎이 처지거나 먼지가 쌓이면 잎 상태를 함께 점검해주세요."},
    "스파티필름": {"sunlight_ko": "밝은 간접광", "tip_ko": "겉흙이 마르면 흠뻑 주고, 잎 끝이 마르면 공중 습도와 물주기 타이밍을 함께 점검해주세요."},
    "금전수": {"sunlight_ko": "반음지~밝은 간접광", "tip_ko": "과습에 약하므로 흙이 충분히 마른 뒤 물을 주고, 새순이 나올 때만 소량의 비료를 주세요."},
    "아레카야자": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 거의 마를 때 물을 주고, 잎 끝이 갈색으로 마르면 습도와 물의 염분을 확인해주세요."},
    "테이블야자": {"sunlight_ko": "반음지", "tip_ko": "강한 직사광은 피하고, 흙이 거의 말랐을 때 물을 주며 찬바람을 오래 맞지 않게 해주세요."},
    "아이비": {"sunlight_ko": "간접광", "tip_ko": "흙이 완전히 마르지 않게 유지하고, 줄기가 길어지면 가지치기해 모양을 잡아주세요."},
    "안스리움": {"sunlight_ko": "밝은 간접광", "tip_ko": "꽃을 오래 보려면 흙을 늘 축축하게 두기보다 약간 마를 때마다 물을 주는 편이 좋습니다."},
    "필로덴드론": {"sunlight_ko": "간접광", "tip_ko": "겉흙이 마르면 물을 주고, 공중뿌리나 잎이 길어지면 지지대를 세워 안정적으로 키워주세요."},
    "알로카시아": {"sunlight_ko": "밝은 간접광", "tip_ko": "생장기에는 흙이 마르기 전에 물을 보충하되, 뿌리가 젖은 상태로 오래 있지 않게 배수를 챙겨주세요."},
    "페퍼로미아": {"sunlight_ko": "밝은 간접광", "tip_ko": "잎이 수분을 저장하므로 흙이 어느 정도 마른 뒤 물을 주고, 과습으로 잎이 물러지지 않게 해주세요."},
    "마란타": {"sunlight_ko": "부드러운 간접광", "tip_ko": "건조에 민감해 표토가 막 마르기 시작할 때 물을 주고, 공중 습도가 너무 낮아지지 않게 해주세요."},
    "칼라데아": {"sunlight_ko": "밝은 간접광", "tip_ko": "직사광을 피하고 흙이 살짝 마를 때마다 물을 주며, 잎 끝 갈변이 생기면 습도를 높여주세요."},
    "디펜바키아": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙 표면이 마르면 물을 주고, 잎 무늬가 흐려지면 빛이 부족하지 않은지 확인해주세요."},
    "홍콩야자": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 어느 정도 마른 뒤 물을 주고, 새순이 약하게 웃자라면 더 밝은 곳으로 옮겨주세요."},
    "드라세나 마지나타": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 절반 정도 말랐을 때 물을 주고, 잎 끝 갈변이 심하면 수돗물 염분을 점검해주세요."},
    "행운목": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙 상층이 마르면 물을 주고, 겨울에는 생장이 느리므로 물주기 간격을 조금 늘려주세요."},
    "유카": {"sunlight_ko": "밝은 곳", "tip_ko": "빛을 충분히 받게 하고 흙이 완전히 마른 뒤 물을 주어 줄기 밑동이 무르지 않게 해주세요."},
    "보스턴고사리": {"sunlight_ko": "반음지", "tip_ko": "흙이 마르지 않게 유지하되 과습은 피하고, 잎이 바삭해지면 공중 습도를 높여주세요."},
    "아글라오네마": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙 표면이 마르면 물을 주고, 추위에 약하니 실내 온도가 너무 낮아지지 않게 관리해주세요."},
    "싱고니움": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 마르면 물을 주고, 덩굴이 길어지면 유인하거나 잘라서 모양을 정리해주세요."},
    "호야": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 거의 다 말랐을 때 물을 주고, 꽃대가 생긴 뒤에는 화분 위치를 자주 바꾸지 마세요."},
    "제라늄": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛이 잘 드는 곳에서 키우고, 겉흙이 마르면 물을 주어 뿌리가 오래 젖지 않게 해주세요."},
    "베고니아": {"sunlight_ko": "밝은 간접광", "tip_ko": "잎과 줄기가 과하게 젖지 않도록 흙에만 물을 주고, 통풍이 잘되게 관리해주세요."},
    "시클라멘": {"sunlight_ko": "밝은 간접광", "tip_ko": "꽃과 구근이 물러지지 않게 화분 가장자리로 물을 주고, 더운 곳은 피해주세요."},
    "호접란": {"sunlight_ko": "밝은 간접광", "tip_ko": "수태나 바크가 거의 말랐을 때 물을 주고, 뿌리 사이에 물이 오래 고이지 않게 해주세요."},
    "덴드로비움": {"sunlight_ko": "밝은 간접광", "tip_ko": "생장기에는 마르면 물을 주고, 겨울 휴면기에는 물주기를 줄여 꽃눈 분화를 도와주세요."},
    "카틀레야": {"sunlight_ko": "밝은 간접광", "tip_ko": "배수가 빠른 배지에서 키우고, 뿌리가 마른 뒤 물을 주는 리듬을 유지해주세요."},
    "파키라": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 절반 이상 말랐을 때 물을 주고, 줄기 아래쪽이 물러지지 않도록 과습을 피해주세요."},
    "올리브나무": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛과 통풍을 충분히 확보하고, 흙이 마른 뒤 물을 주어 뿌리가 답답하지 않게 해주세요."},
    "로즈마리": {"sunlight_ko": "햇빛 필요", "tip_ko": "빛과 통풍이 충분해야 향이 좋으니, 흙이 마른 뒤 물을 주고 늘 축축하지 않게 해주세요."},
    "라벤더": {"sunlight_ko": "햇빛 필요", "tip_ko": "과습에 특히 약하니 햇빛과 배수를 확보하고, 흙이 마른 뒤에만 물을 주세요."},
    "민트": {"sunlight_ko": "밝은 곳", "tip_ko": "물 요구량이 높은 편이라 겉흙이 마르면 바로 물을 주고, 오래된 줄기는 자주 잘라주세요."},
    "바질": {"sunlight_ko": "햇빛 필요", "tip_ko": "겉흙이 마르기 전에 물을 주고, 꽃대가 올라오면 일찍 잘라 잎 생산을 유지해주세요."},
    "타임": {"sunlight_ko": "햇빛 필요", "tip_ko": "건조에 비교적 강하니 흙이 마른 뒤 물을 주고, 축축한 환경이 오래가지 않게 해주세요."},
    "오레가노": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛을 충분히 보여주고 흙이 마른 뒤 물을 주며, 과하게 웃자라면 가지를 정리해주세요."},
    "세이지": {"sunlight_ko": "햇빛 필요", "tip_ko": "통풍이 좋은 곳에서 흙이 마른 뒤 물을 주고, 잎에 수분이 오래 남지 않게 해주세요."},
    "파슬리": {"sunlight_ko": "밝은 곳", "tip_ko": "건조에 약하므로 겉흙이 마르면 물을 주고, 오래된 바깥잎부터 수확해주세요."},
    "레몬밤": {"sunlight_ko": "밝은 곳", "tip_ko": "흙이 너무 마르지 않게 관리하고, 줄기가 웃자라면 자주 수확해 새순을 유도해주세요."},
    "차이브": {"sunlight_ko": "햇빛 필요", "tip_ko": "겉흙이 마르면 물을 주고, 잎을 너무 짧게 자르지 않도록 남겨두며 수확해주세요."},
    "딜": {"sunlight_ko": "햇빛 필요", "tip_ko": "곧게 자라도록 밝은 곳에 두고, 흙이 마르기 전에 물을 가볍게 보충해주세요."},
    "고수": {"sunlight_ko": "밝은 곳", "tip_ko": "더위에 빨리 꽃대가 오르므로 서늘하고 밝은 곳에서 흙이 마르면 물을 주세요."},
    "펜넬": {"sunlight_ko": "햇빛 필요", "tip_ko": "뿌리와 줄기가 자랄 때 수분이 부족하지 않게 관리하되, 배수는 잘되게 해주세요."},
    "알로에": {"sunlight_ko": "밝은 곳", "tip_ko": "흙이 완전히 마른 뒤 물을 주고, 잎 사이 중앙부에 물이 오래 남지 않게 해주세요."},
    "에케베리아": {"sunlight_ko": "밝은 곳", "tip_ko": "로제트 안쪽에 물이 고이지 않게 흙에만 물을 주고, 빛이 부족하면 웃자랄 수 있습니다."},
    "세덤": {"sunlight_ko": "밝은 곳", "tip_ko": "흙이 잘 말랐을 때 물을 주고, 빛이 부족하면 줄기가 길어지므로 밝게 관리해주세요."},
    "염자": {"sunlight_ko": "밝은 곳", "tip_ko": "토양이 충분히 말랐을 때 물을 주고, 겨울에는 물을 더 적게 주세요."},
    "하월시아": {"sunlight_ko": "밝은 간접광", "tip_ko": "강한 한낮 직사광은 피하고, 흙이 말랐을 때만 물을 주며 통풍을 확보해주세요."},
    "리톱스": {"sunlight_ko": "밝은 곳", "tip_ko": "탈피 시기에는 물을 과하게 주지 말고, 생장기에도 완전히 말랐을 때만 가볍게 주세요."},
    "아가베": {"sunlight_ko": "햇빛 필요", "tip_ko": "강한 빛을 좋아하므로 햇빛을 충분히 보여주고 흙이 완전히 마른 뒤 물을 주세요."},
    "목걸이식물": {"sunlight_ko": "밝은 간접광", "tip_ko": "구슬 잎이 쭈글해지기 시작할 때 물을 주고, 과습으로 줄기가 썩지 않게 해주세요."},
    "칼랑코에": {"sunlight_ko": "밝은 곳", "tip_ko": "겉흙이 마른 뒤 물을 주고, 꽃이 진 뒤에는 꽃대를 정리해 다음 개화를 준비해주세요."},
    "틸란드시아": {"sunlight_ko": "밝은 간접광", "tip_ko": "주기적으로 분무하거나 짧게 담가 수분을 보충한 뒤, 반드시 완전히 말리세요."},
    "구즈마니아": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙은 약간 촉촉하게 유지하고, 로제트 컵에는 깨끗한 물을 얕게 유지해 주세요."},
    "에크메아": {"sunlight_ko": "밝은 간접광", "tip_ko": "잎 중앙의 컵에 오래된 물이 고이지 않게 주기적으로 갈아주고 배수를 챙겨주세요."},
    "부겐빌레아": {"sunlight_ko": "햇빛 필요", "tip_ko": "꽃을 잘 보려면 햇빛을 충분히 받고, 흙이 마른 뒤 물을 주며 과습을 피해주세요."},
    "히비스커스": {"sunlight_ko": "햇빛 필요", "tip_ko": "꽃이 계속 피려면 흙이 마르기 전에 물을 주고, 시든 꽃은 바로 정리해주세요."},
    "치자나무": {"sunlight_ko": "밝은 간접광", "tip_ko": "건조와 알칼리성 물에 민감하니 토양을 촉촉하게 유지하고 잎 황화를 주의 깊게 보세요."},
    "동백나무": {"sunlight_ko": "밝은 간접광", "tip_ko": "토양이 지나치게 마르지 않게 관리하고, 꽃봉오리 시기에는 환경 변화를 최소화해주세요."},
    "철쭉": {"sunlight_ko": "밝은 간접광", "tip_ko": "산성 토양을 선호하므로 흙이 마르기 전에 물을 주고 더운 건조 환경은 피해주세요."},
    "수국": {"sunlight_ko": "밝은 간접광", "tip_ko": "잎이 넓어 수분 소모가 크니 겉흙이 마르면 바로 물을 주고 한낮 강광은 피해주세요."},
    "자스민": {"sunlight_ko": "밝은 곳", "tip_ko": "개화를 위해 빛을 충분히 보여주고, 생장기에는 흙이 마르기 전에 물을 주세요."},
    "월계수": {"sunlight_ko": "밝은 곳", "tip_ko": "햇빛과 통풍을 확보하고, 흙이 어느 정도 마른 뒤 물을 주며 과습을 피해주세요."},
    "무화과나무": {"sunlight_ko": "햇빛 필요", "tip_ko": "빛을 충분히 받고 흙이 마르면 깊게 물을 주되, 뿌리가 계속 젖어 있지 않게 하세요."},
    "벤자민": {"sunlight_ko": "밝은 간접광", "tip_ko": "환경 변화에 잎을 떨굴 수 있으니 자리를 자주 바꾸지 말고 물주기 리듬을 일정하게 유지하세요."},
    "떡갈잎고무나무": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙 윗부분이 마르면 물을 주고, 잎이 큰 만큼 먼지를 닦아 광합성을 돕는 것이 좋습니다."},
    "벵갈고무나무": {"sunlight_ko": "밝은 간접광", "tip_ko": "밝은 곳에서 흙이 어느 정도 마른 뒤 물을 주고, 새 잎이 상처나지 않게 통풍을 챙겨주세요."},
    "커피나무": {"sunlight_ko": "밝은 간접광", "tip_ko": "건조에 약하니 흙을 완전히 말리지 말고, 공중 습도도 너무 낮아지지 않게 관리해주세요."},
    "레몬나무": {"sunlight_ko": "햇빛 필요", "tip_ko": "열매와 새순을 위해 햇빛을 충분히 받고, 흙이 마르면 깊게 물을 주세요."},
    "블루베리": {"sunlight_ko": "햇빛 필요", "tip_ko": "산성 토양을 유지하고 건조에 약하므로 흙이 마르기 전에 물을 보충해주세요."},
    "딸기": {"sunlight_ko": "햇빛 필요", "tip_ko": "열매가 맺히는 동안 수분이 부족하지 않게 관리하되, 잎과 과실이 늘 젖어 있지 않게 해주세요."},
    "석류나무": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛을 충분히 받고 흙이 마른 뒤 물을 주며, 과습으로 뿌리가 답답해지지 않게 하세요."},
    "아보카도": {"sunlight_ko": "밝은 곳", "tip_ko": "흙 윗부분이 마르면 물을 주고, 어린 줄기가 약하니 추위와 강풍을 피해주세요."},
    "피레아": {"sunlight_ko": "밝은 간접광", "tip_ko": "겉흙이 마르면 물을 주고, 한쪽으로 기울지 않게 화분 방향을 주기적으로 바꿔주세요."},
    "트라데스칸티아": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 마르면 물을 주고, 줄기가 길어지면 잘라 꽂아 풍성하게 관리할 수 있습니다."},
    "아스플레니움": {"sunlight_ko": "반음지", "tip_ko": "중앙 새잎이 나오는 부분에 물이 고이지 않게 하고, 흙은 늘 약간 촉촉하게 유지해주세요."},
    "크로톤": {"sunlight_ko": "밝은 간접광", "tip_ko": "잎 색을 선명하게 유지하려면 밝은 곳에서 키우고, 흙이 마르면 바로 물을 주세요."},
    "콜레우스": {"sunlight_ko": "밝은 간접광", "tip_ko": "잎색이 흐려지지 않게 밝게 관리하고, 겉흙이 마르기 전에 물을 보충해주세요."},
    "핏토니아": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 마르면 금세 축 처질 수 있으니 표토가 마를 때 바로 물을 주세요."},
    "폴리시아스": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 어느 정도 마른 뒤 물을 주고, 잎이 갑자기 떨어지면 찬바람과 과습을 먼저 점검하세요."},
    "클루시아": {"sunlight_ko": "밝은 곳", "tip_ko": "빛을 충분히 확보하고 흙이 마른 뒤 물을 주며, 잎이 두꺼워도 과습은 피해주세요."},
    "네펜데스": {"sunlight_ko": "밝은 간접광", "tip_ko": "배지를 마르게 두지 말고 습도를 높게 유지하며, 가능하면 정수나 빗물을 사용해주세요."},
    "사라세니아": {"sunlight_ko": "햇빛 필요", "tip_ko": "강한 빛을 좋아하고 배지가 마르면 안 되므로, 받침에 물을 유지하는 방식이 잘 맞습니다."},
    "파리지옥": {"sunlight_ko": "햇빛 필요", "tip_ko": "충분한 햇빛을 보여주고 배지가 마르지 않게 유지하며, 수돗물 대신 깨끗한 물이 좋습니다."},
    "드로세라": {"sunlight_ko": "밝은 곳", "tip_ko": "배지가 마르지 않게 유지하고, 점액이 잘 나오도록 밝고 습한 환경을 유지해주세요."},
    "옥살리스": {"sunlight_ko": "밝은 간접광", "tip_ko": "겉흙이 마르면 물을 주고, 휴면기에 들어가면 물주기 횟수를 줄여 관리해주세요."},
    "시서스": {"sunlight_ko": "밝은 간접광", "tip_ko": "흙이 마르면 물을 주고, 덩굴이 길어지면 유인하거나 잘라 수형을 정리해주세요."},
    "산호수": {"sunlight_ko": "밝은 간접광", "tip_ko": "열매와 잎 상태를 유지하려면 흙이 완전히 마르기 전에 물을 주는 편이 좋습니다."},
    "만세선인장": {"sunlight_ko": "직사광 가능", "tip_ko": "강한 빛을 받게 하고 흙이 완전히 마른 뒤 물을 주며, 겨울에는 더욱 건조하게 관리하세요."},
    "게발선인장": {"sunlight_ko": "밝은 간접광", "tip_ko": "숲성 선인장이므로 일반 선인장보다 물을 조금 더 자주 주되, 늘 젖어 있지는 않게 해주세요."},
    "만데빌라": {"sunlight_ko": "햇빛 필요", "tip_ko": "꽃을 많이 보려면 햇빛과 지지대가 필요하며, 겉흙이 마르면 물을 충분히 주세요."},
    "페튜니아": {"sunlight_ko": "햇빛 필요", "tip_ko": "개화량이 많아 수분 소모가 크니 흙이 마르기 전에 물을 주고 시든 꽃을 정리해주세요."},
    "팬지": {"sunlight_ko": "밝은 곳", "tip_ko": "서늘한 환경을 좋아하므로 더운 오후 직사광은 피하고, 흙이 마르면 바로 물을 주세요."},
    "프리지아": {"sunlight_ko": "밝은 곳", "tip_ko": "꽃대가 올라오는 동안 흙이 지나치게 마르지 않게 하고, 꽃이 진 뒤에는 물을 줄이세요."},
    "튤립": {"sunlight_ko": "밝은 곳", "tip_ko": "구근이 썩지 않게 배수를 확보하고, 꽃대가 자라는 동안 흙이 완전히 마르지 않게 유지해주세요."},
    "백합": {"sunlight_ko": "밝은 곳", "tip_ko": "구근이 자라는 동안 수분이 필요하니 흙이 마르면 물을 주되, 과습으로 썩지 않게 해주세요."},
    "카네이션": {"sunlight_ko": "햇빛 필요", "tip_ko": "꽃이 오래가도록 밝은 곳에서 키우고, 흙이 마르면 바로 물을 주되 통풍을 확보해주세요."},
    "국화": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛이 부족하면 꽃이 약해지므로 밝게 관리하고, 겉흙이 마르면 물을 주세요."},
    "금잔화": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛을 충분히 보여주고, 흙이 마르면 물을 주며 시든 꽃은 바로 제거해주세요."},
    "데이지": {"sunlight_ko": "햇빛 필요", "tip_ko": "꽃이 많을 때는 수분 소모가 커서 겉흙이 마르면 바로 물을 주는 것이 좋습니다."},
    "거베라": {"sunlight_ko": "밝은 간접광", "tip_ko": "꽃 중심부가 젖지 않게 흙에만 물을 주고, 통풍을 유지해 곰팡이를 예방해주세요."},
    "라넌큘러스": {"sunlight_ko": "밝은 곳", "tip_ko": "서늘한 환경에서 흙을 적당히 촉촉하게 유지하면 꽃과 잎 상태를 오래 볼 수 있습니다."},
    "스토크": {"sunlight_ko": "햇빛 필요", "tip_ko": "서늘하고 밝은 환경을 좋아하니, 흙이 마르면 바로 물을 주고 더위는 피해주세요."},
    "금어초": {"sunlight_ko": "햇빛 필요", "tip_ko": "햇빛이 충분해야 꽃대가 튼튼하므로 밝은 곳에서 키우고, 겉흙이 마르면 물을 주세요."},
    "안개꽃": {"sunlight_ko": "햇빛 필요", "tip_ko": "과습보다는 약간 건조한 쪽이 나으니 흙이 마른 뒤 물을 주고 통풍을 확보해주세요."},
    "알스트로메리아": {"sunlight_ko": "밝은 곳", "tip_ko": "꽃이 지속되는 동안 흙이 너무 마르지 않게 하고, 시든 꽃대는 밑에서 제거해주세요."},
    "봉선화": {"sunlight_ko": "밝은 간접광", "tip_ko": "수분 소모가 빨라 겉흙이 마르면 바로 물을 주고, 통풍이 부족하지 않게 해주세요."},
    "뉴기니 임파첸스": {"sunlight_ko": "밝은 간접광", "tip_ko": "강한 직사광은 피하고 흙이 마르기 전에 물을 주면 꽃과 잎 상태를 오래 유지할 수 있습니다."},
    "토레니아": {"sunlight_ko": "밝은 간접광", "tip_ko": "여름에도 꽃을 보려면 흙이 마르기 전에 물을 주고 뜨거운 한낮 직사광은 피해주세요."},
    "로벨리아": {"sunlight_ko": "밝은 곳", "tip_ko": "서늘한 환경을 좋아하므로 더위가 심할 땐 반나절 그늘을 주고, 마르기 전에 물을 주세요."},
    "아네모네": {"sunlight_ko": "밝은 곳", "tip_ko": "구근성 꽃이므로 흙을 너무 축축하게 두지 말고, 마르기 전에 적당히 보충해주세요."},
    "제비꽃": {"sunlight_ko": "밝은 간접광", "tip_ko": "서늘하고 통풍 좋은 곳에서 흙이 마르면 물을 주며, 꽃이 진 자리는 바로 정리해주세요."},
}


def parse_args():
    parser = argparse.ArgumentParser(description="Apply actual translations and plant-specific care for the current 116 presets.")
    parser.add_argument("--env-file", default=str(DEFAULT_ENV_PATH))
    parser.add_argument("--dry-run", action="store_true")
    return parser.parse_args()


def load_env(env_path: str) -> None:
    path = Path(env_path)
    if not path.exists():
        return
    for line in path.read_text(encoding="utf-8").splitlines():
        if not line or line.strip().startswith("#") or "=" not in line:
            continue
        key, value = line.split("=", 1)
        os.environ.setdefault(key.strip(), value.strip())


def connect_db():
    return mysql.connector.connect(
        host=os.environ["DB_HOST"],
        port=int(os.environ.get("DB_PORT", "3306")),
        user=os.environ["DB_USER"],
        password=os.environ["DB_PASSWORD"],
        database=os.environ["DB_NAME"],
        charset="utf8mb4",
    )


TRANSLATION_CACHE = {}


def translate_text(text: str, target_lang: str) -> str:
    cache_key = (text, target_lang)
    if cache_key in TRANSLATION_CACHE:
        return TRANSLATION_CACHE[cache_key]

    url = (
        "https://translate.googleapis.com/translate_a/single"
        f"?client=gtx&sl=ko&tl={target_lang}&dt=t&q={quote(text)}"
    )
    request = Request(url, headers={"User-Agent": "Mozilla/5.0"})
    for attempt in range(5):
        try:
            with urlopen(request, timeout=30) as response:
                payload = json.loads(response.read().decode("utf-8"))
                translated = "".join(part[0] for part in payload[0] if part and part[0])
                TRANSLATION_CACHE[cache_key] = translated
                time.sleep(0.15)
                return translated
        except Exception:
            if attempt == 4:
                raise
            time.sleep(1 + attempt)
    raise RuntimeError(f"translation failed: {text} -> {target_lang}")


def main():
    args = parse_args()
    load_env(args.env_file)

    conn = connect_db()
    cursor = conn.cursor(dictionary=True)

    try:
        cursor.execute(
            """
            SELECT id, type_name, sort_order
            FROM plant_reminder_presets
            ORDER BY sort_order ASC, id ASC
            """
        )
        rows = cursor.fetchall()

        if len(rows) != 116:
            raise ValueError(f"Expected 116 presets, found {len(rows)}")

        missing_names = [row["type_name"] for row in rows if row["type_name"] not in NAME_TRANSLATIONS or row["type_name"] not in CARE_OVERRIDES]
        if missing_names:
            raise ValueError(f"Missing translation/care definitions: {missing_names}")

        updated = 0
        for row in rows:
            name_ko = row["type_name"]
            names = NAME_TRANSLATIONS[name_ko]
            care = CARE_OVERRIDES[name_ko]

            sunlight_ko = care["sunlight_ko"]
            tip_ko = care["tip_ko"]

            sunlight_en = translate_text(sunlight_ko, "en")
            sunlight_ja = translate_text(sunlight_ko, "ja")
            sunlight_zh = translate_text(sunlight_ko, "zh-CN")

            tip_en = translate_text(tip_ko, "en")
            tip_ja = translate_text(tip_ko, "ja")
            tip_zh = translate_text(tip_ko, "zh-CN")

            if args.dry_run:
                updated += 1
                continue

            cursor.execute(
                """
                UPDATE plant_reminder_presets
                SET
                  type_name = %s,
                  type_name_ko = %s,
                  type_name_en = %s,
                  type_name_ja = %s,
                  type_name_zh = %s,
                  sunlight = %s,
                  sunlight_ko = %s,
                  sunlight_en = %s,
                  sunlight_ja = %s,
                  sunlight_zh = %s,
                  tip = %s,
                  tip_ko = %s,
                  tip_en = %s,
                  tip_ja = %s,
                  tip_zh = %s,
                  updated_at = NOW()
                WHERE id = %s
                """,
                (
                    name_ko,
                    name_ko,
                    names["en"],
                    names["ja"],
                    names["zh"],
                    sunlight_ko,
                    sunlight_ko,
                    sunlight_en,
                    sunlight_ja,
                    sunlight_zh,
                    tip_ko,
                    tip_ko,
                    tip_en,
                    tip_ja,
                    tip_zh,
                    row["id"],
                ),
            )
            updated += 1
            if updated % 10 == 0:
                conn.commit()
                print(f"[progress] updated={updated}")

        if not args.dry_run:
            conn.commit()

        print({"updated": updated, "dry_run": args.dry_run})
    finally:
        cursor.close()
        conn.close()


if __name__ == "__main__":
    main()
