from __future__ import annotations

import argparse
import json
import logging
import sys
from typing import Any, Dict, List, Optional

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
from db.models import MagentoConnection
from db.session import get_session
from magento.oauth_client import MagentoOAuthClient, build_magento_oauth_kwargs
from magento.magento_api import MagentoRestClient
#GET /rest/V1/cmsPage/search
#GET /rest/V1/cmsPage/search?searchCriteria[currentPage]=1&searchCriteria[pageSize]=100
#GET /rest/V1/cmsPage/1
#Lets create these three functions to pull the above three endpoints
#
def _get_cms_pages(connection_id: int):
    with get_session() as session:
        conn = session.get(MagentoConnection, connection_id)
        if not conn:
            raise ValueError(f"Magento connection {connection_id} not found")
        
        oauth = MagentoOAuthClient(**build_magento_oauth_kwargs(conn))
        magento_api = MagentoRestClient(oauth)
        return magento_api.get_cms_pages()
def _search_cms_pages(connection_id: int, search_criteria: dict):
    with get_session() as session:
        conn = session.get(MagentoConnection, connection_id)
        if not conn:
            raise ValueError(f"Magento connection {connection_id} not found")
        
        oauth = MagentoOAuthClient(**build_magento_oauth_kwargs(conn))
        magento_api = MagentoRestClient(oauth)
        return magento_api.search_cms_pages(**search_criteria)
def _get_cms_page(connection_id: int, page_id: int):
    with get_session() as session:
        conn = session.get(MagentoConnection, connection_id)
        if not conn:
            raise ValueError(f"Magento connection {connection_id} not found")
        
        oauth = MagentoOAuthClient(**build_magento_oauth_kwargs(conn))
        magento_api = MagentoRestClient(oauth)
        return magento_api.get_cms_page(page_id)
def _pull_cms_pages(connection_id: int):
    with get_session() as session:
        conn = session.get(MagentoConnection, connection_id)
        if not conn:
            raise ValueError(f"Magento connection {connection_id} not found")
        

        oauth = MagentoOAuthClient(**build_magento_oauth_kwargs(conn))
        magento_api = MagentoRestClient(oauth)
        return magento_api.get_cms_pages()

def main():
    parser = argparse.ArgumentParser(description="Pull CMS pages from Magento")
    parser.add_argument("--connection-id", type=int, required=True)
    parser.add_argument("--page-id", type=int, required=False)
    parser.add_argument("--search-criteria", type=dict, required=False)
    args = parser.parse_args()
    if args.page_id:
        result = _get_cms_page(args.connection_id, args.page_id)
    elif args.search_criteria is not None:
        criteria = args.search_criteria() or {}
        result = _search_cms_pages(args.connection_id, criteria)
    else:
        result = _pull_cms_pages(args.connection_id)
    print(json.dumps(result, indent=2, default=str))
    return 0
if __name__ == "__main__":
    sys.exit(main())
