import os
import time
from dotenv import load_dotenv
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

# 환경변수 로드
load_dotenv()
LOGIN_URL = os.getenv("TARGET_LOGIN_URL")
SEARCH_PAGE_URL = "https://www.my-auction.co.kr/auction/search.php" 
MY_ID = os.getenv("USER_ID")
MY_PW = os.getenv("USER_PW")

def get_gyeonggi_codes():
    options = webdriver.ChromeOptions()
    # options.add_argument("--headless") 
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

    try:
        print("🔓 [코드 해독기 - 경기도편] 접속 시작...")
        
        # 1. 로그인 (골든 코드)
        driver.get(LOGIN_URL)
        time.sleep(1)
        driver.find_element(By.ID, "id").send_keys(MY_ID)
        driver.find_element(By.ID, "passwd").send_keys(MY_PW)
        driver.find_element(By.ID, "passwd").send_keys(Keys.RETURN)
        time.sleep(2)

        # 2. 검색 페이지 이동
        driver.get(SEARCH_PAGE_URL)
        time.sleep(2)
        
        print("\n" + "="*40)
        print("🚌 경기도(3) 선택 및 하위 지역 로딩 중...")
        print("="*40)

        # 3. 경기도 강제 선택
        # 아까 주인님이 구하신 코드표에 따르면 경기도는 '3'번입니다.
        try:
            sido_element = driver.find_element(By.NAME, "address1_01")
            select_sido = Select(sido_element)
            select_sido.select_by_value("3") # '3' = 경기도
            
            # 중요: 선택 후 목록이 갱신될 때까지 충분히 기다려야 합니다.
            time.sleep(2) 
            
            # 4. 갱신된 HTML 다시 파싱
            soup = BeautifulSoup(driver.page_source, 'html.parser')
            
            gugun_select = soup.find('select', {'name': 'address1_02'})
            
            if gugun_select:
                options = gugun_select.find_all('option')
                print(f"✅ 경기도 하위 지역 코드 발견! (총 {len(options)}개)")
                for opt in options:
                    txt = opt.text.strip()
                    val = opt.get('value')
                    # '전체'나 빈 값은 제외하고 출력
                    if val and val != "0" and val != "":
                        print(f"[{val}] : {txt}")
            else:
                print("❌ 구/군 선택 박스를 못 찾았습니다.")

        except Exception as e:
            print(f"⚠️ 지역 선택 중 에러: {e}")

    except Exception as e:
        print(f"❌ 에러 발생: {e}")
    finally:
        # driver.quit()
        print("\n🔒 해독 종료.")

if __name__ == "__main__":
    get_gyeonggi_codes()