import os
from flask import send_from_directory, abort
from helpers import dir_path

def register_sitemap_routes(app):
    
    # ===== MAIN SITEMAP INDEX =====
    # This is the main sitemap index that points to all other sitemaps
    @app.route('/sitemap.xml')
    def serve_main_sitemap_index():
        """Serve the main sitemap index (points to all sitemaps)"""
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps')
        filename = 'sitemap.xml'
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)
    
    # ===== MAIN DOMAIN SITEMAPS =====
    # English sitemaps (sitemap-main.xml, sitemap-main-1.xml, etc.)
    @app.route('/sitemap-main.xml')
    @app.route('/sitemap-main-<int:num>.xml')
    def serve_main_english_sitemap(num=None):
        """Serve English main domain sitemap files"""
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps')
        
        if num:
            filename = f"sitemap-main-{num}.xml"
        else:
            filename = "sitemap-main.xml"
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)
    
    # Non-English main domain sitemaps (sitemap-main-tr.xml, sitemap-main-tr-1.xml, etc.)
    @app.route('/sitemap-main-<lang>.xml')
    @app.route('/sitemap-main-<lang>-<int:num>.xml')
    def serve_main_language_sitemap(lang, num=None):
        """Serve non-English main domain sitemap files"""
        from configs.languages import supported_languages
        
        if lang not in supported_languages or lang == 'en':
            abort(404)
        
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps')
        
        if num:
            filename = f"sitemap-main-{lang}-{num}.xml"
        else:
            filename = f"sitemap-main-{lang}.xml"
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)
    
    # ===== LANGUAGE-SPECIFIC SITEMAP INDEXES (for backward compatibility) =====
    # These are for non-English languages when subdomains are OFF
    @app.route('/<lang>-sitemap.xml')
    def serve_language_sitemap_index(lang):
        """Serve language-specific sitemap index (for subdomains OFF mode)"""
        from configs.languages import supported_languages
        
        if lang not in supported_languages or lang == 'en':
            abort(404)
        
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps')
        filename = f"{lang}-sitemap.xml"
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)
    
    # ===== SUBDOMAIN SITEMAPS =====
    # Subdomain English sitemaps (image.onlineconvert.cc/sitemap.xml, sitemap-1.xml, etc.)
    @app.route('/sitemap.xml', subdomain='<subdomain>')
    @app.route('/sitemap-<int:num>.xml', subdomain='<subdomain>')
    def serve_subdomain_english_sitemap(subdomain, num=None):
        """Serve English sitemaps on subdomains"""
        from configs.filetypes import available_filetypes
        
        all_subdomains = list(available_filetypes.keys()) + ['hash-generators']
        if subdomain not in all_subdomains:
            abort(404)
        
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps', 'subdomains', subdomain)
        
        if num:
            filename = f"sitemap-{num}.xml"
        else:
            filename = "sitemap.xml"
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)
    
    # Subdomain language sitemaps (image.onlineconvert.cc/sitemap-tr.xml, sitemap-tr-1.xml, etc.)
    @app.route('/sitemap-<lang>.xml', subdomain='<subdomain>')
    @app.route('/sitemap-<lang>-<int:num>.xml', subdomain='<subdomain>')
    def serve_subdomain_language_sitemap(subdomain, lang, num=None):
        """Serve non-English sitemaps on subdomains"""
        from configs.languages import supported_languages
        from configs.filetypes import available_filetypes
        
        if lang not in supported_languages or lang == 'en':
            abort(404)
        
        all_subdomains = list(available_filetypes.keys()) + ['hash-generators']
        if subdomain not in all_subdomains:
            abort(404)
        
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps', 'subdomains', subdomain)
        
        if num:
            filename = f"sitemap-{lang}-{num}.xml"
        else:
            filename = f"sitemap-{lang}.xml"
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)
    
    # Subdomain sitemap index (if multiple sitemaps exist for a subdomain)
    @app.route('/sitemap-index.xml', subdomain='<subdomain>')
    def serve_subdomain_index(subdomain):
        """Serve subdomain sitemap index (points to multiple sitemap files)"""
        from configs.filetypes import available_filetypes
        
        all_subdomains = list(available_filetypes.keys()) + ['hash-generators']
        if subdomain not in all_subdomains:
            abort(404)
        
        sitemap_dir = os.path.join(dir_path, 'static', 'sitemaps', 'subdomains', subdomain)
        filename = 'sitemap-index.xml'
        
        try:
            return send_from_directory(sitemap_dir, filename)
        except FileNotFoundError:
            abort(404)