# -*- coding: utf-8 -*-
"""
LVT EUDR Module — Internationalization (i18n).

Bilingual translation system (English / Vietnamese) for the
EUDR GeoJSON Export panel.

Author: Lộc Vũ Trung (LVT) / Slow Forest
License: GPL-3.0

Reference:
    - EU Regulation 2023/1115 (EU Deforestation Regulation)
    - GeoJSON RFC 7946
"""

_EUDR_TRANSLATIONS = {
    # --- Window ---
    "EUDR GeoJSON Export": "Xuất GeoJSON EUDR",
    "EUDR GeoJSON Exporter — EU Regulation 2023/1115":
        "Công cụ Xuất GeoJSON EUDR — Quy định EU 2023/1115",

    # --- Language toggle ---
    "English": "English",
    "Vietnamese": "Tiếng Việt",

    # --- Group boxes ---
    "1. Select Layer": "1. Chọn Lớp dữ liệu",
    "2. EUDR Field Mapping": "2. Ánh xạ Trường EUDR",
    "3. Export Settings": "3. Cài đặt Xuất",
    "4. Validation & Statistics": "4. Kiểm tra & Thống kê",

    # --- Labels ---
    "Select Layer:": "Chọn lớp bản đồ:",
    "Geometry Type:": "Loại hình học:",
    "Feature Count:": "Số đối tượng:",
    "Layer CRS:": "Hệ tọa độ lớp:",
    "Output CRS:": "Hệ tọa độ đầu ra:",

    # --- EUDR Field labels ---
    "Production Place:": "Nơi sản xuất:",
    "Country of Production:": "Quốc gia sản xuất:",
    "Product Description:": "Mô tả sản phẩm:",
    "HS Code:": "Mã HS:",
    "Operator Name:": "Tên nhà vận hành:",
    "Plot ID:": "Mã lô:",
    "Area (ha):": "Diện tích (ha):",
    "Latitude:": "Vĩ độ:",
    "Longitude:": "Kinh độ:",
    "(auto — Point on Surface Y)": "(tự động — Điểm trên bề mặt Y)",
    "(auto — Point on Surface X)": "(tự động — Điểm trên bề mặt X)",
    "Date of Production:": "Ngày sản xuất:",
    "Species:": "Loài cây trồng:",
    "Farmer ID:": "Mã nông hộ:",
    "Data Collection Date:": "Ngày thu thập dữ liệu:",
    "Producer Country (ISO2):": "Quốc gia sản xuất (ISO2):",

    # --- Field mapping hints ---
    "(select field or type value)": "(chọn trường hoặc nhập giá trị)",
    "(auto-calculated from geometry)": "(tự động tính từ hình học)",
    "(optional)": "(tùy chọn)",
    "(required for EUDR)": "(bắt buộc theo EUDR)",
    "-- Leave empty --": "-- Để trống --",
    "-- Manual value --": "-- Nhập thủ công --",

    # --- Export settings ---
    "Coordinate Precision (decimals):": "Độ chính xác tọa độ (số thập phân):",
    "Area Threshold (ha):": "Ngưỡng diện tích (ha):",
    "≤ threshold → Point centroid": "≤ ngưỡng → Điểm tâm",
    "> threshold → Polygon boundary": "> ngưỡng → Ranh giới đa giác",
    "Include area in properties": "Đưa diện tích vào thuộc tính",
    "Calculate area from geometry": "Tính diện tích từ hình học",
    "Use area field:": "Dùng trường diện tích:",
    "Validate geometries before export": "Kiểm tra hình học trước khi xuất",
    "Export Mode:": "Chế độ xuất:",

    # --- Statistics ---
    "Total features:": "Tổng số đối tượng:",
    "Point (≤ {threshold} ha):": "Điểm (≤ {threshold} ha):",
    "Polygon (> {threshold} ha):": "Đa giác (> {threshold} ha):",
    "Invalid geometries:": "Hình học không hợp lệ:",
    "Estimated file size:": "Kích thước tập tin dự kiến:",

    # --- Buttons ---
    "Refresh": "Làm mới",
    "Preview Statistics": "Xem thống kê",
    "Export GeoJSON": "Xuất GeoJSON",
    "Close": "Đóng",

    # --- Messages ---
    "Export completed successfully!\n\nFile: {path}\nFeatures: {count}\nPoints: {points}\nPolygons: {polygons}":
        "Xuất thành công!\n\nTập tin: {path}\nĐối tượng: {count}\nĐiểm: {points}\nĐa giác: {polygons}",
    "No vector layer selected.": "Chưa chọn lớp vector.",
    "Selected layer has no features.": "Lớp được chọn không có đối tượng.",
    "Export failed:\n{error}": "Xuất thất bại:\n{error}",
    "Please select a valid vector layer.": "Vui lòng chọn lớp vector hợp lệ.",
    "GeoJSON file size exceeds 25 MB limit. Consider splitting into multiple files.":
        "Tập tin GeoJSON vượt quá giới hạn 25 MB. Hãy chia thành nhiều tập tin.",
    "Found {count} invalid geometries. Fix before exporting.":
        "Phát hiện {count} hình học không hợp lệ. Hãy sửa trước khi xuất.",
    "All geometries are valid.": "Tất cả hình học đều hợp lệ.",
    "Help": "Trợ giúp",
    "Save GeoJSON File": "Lưu tập tin GeoJSON",
    "GeoJSON Files (*.geojson)": "Tập tin GeoJSON (*.geojson)",
    "WGS84 (EPSG:4326) — Required by EUDR":
        "WGS84 (EPSG:4326) — Bắt buộc theo EUDR",

    # --- Tooltips ---
    "EUDR requires WGS84 (EPSG:4326) coordinates with ≥6 decimal precision.":
        "EUDR yêu cầu tọa độ WGS84 (EPSG:4326) với độ chính xác ≥6 số thập phân.",
    "Plots ≤ 4 ha: single point (centroid). Plots > 4 ha: polygon boundary.":
        "Lô ≤ 4 ha: điểm đơn (tâm). Lô > 4 ha: ranh giới đa giác.",
    "Map source layer fields to EUDR required properties.":
        "Ánh xạ trường dữ liệu nguồn sang thuộc tính bắt buộc EUDR.",

    # --- Guide tab ---
    "Guide": "Hướng dẫn",
    "Author": "Tác giả",

    # --- Validation messages ---
    "Polygon is not closed — auto-closing applied.":
        "Đa giác chưa đóng — đã tự động đóng.",
    "Self-intersecting polygon detected at feature {fid}. Attempting repair.":
        "Phát hiện đa giác tự cắt tại đối tượng {fid}. Đang thử sửa.",
    "Feature {fid} has null geometry — skipped.":
        "Đối tượng {fid} không có hình học — đã bỏ qua.",
    "CRS transformation applied: {src} → EPSG:4326":
        "Đã chuyển đổi hệ tọa độ: {src} → EPSG:4326",
}


def tr(text, lang=None):
    """Translate text based on language setting.

    Args:
        text: English text key.
        lang: 'en' or 'vi'. If None, uses shared language setting.

    Returns:
        str: Translated text or original if no translation found.
    """
    if lang is None:
        try:
            from ..shared.i18n import current_language
            lang = current_language()
        except (ImportError, ValueError):
            lang = 'vi'
    if lang == 'vi':
        return _EUDR_TRANSLATIONS.get(text, text)
    return text


def get_guide(lang='vi'):
    """Return the EUDR guide HTML for the Guide tab.

    Comprehensive bilingual guide based on EU Regulation 2023/1115
    and the EUDR_GIS_Nui_Thanh.pptx reference material.

    Args:
        lang: 'en' or 'vi'.

    Returns:
        str: HTML content for the guide tab.
    """
    if lang == 'vi':
        return """
        <div style='font-family:Arial;padding:10px;line-height:1.6;'>
        <h2 style='color:#1B5E20;'>📘 Hướng dẫn Xuất GeoJSON EUDR</h2>

        <div style='background:#E8F5E9;padding:12px;border-radius:6px;
        border-left:5px solid #1B5E20;margin:10px 0;'>
        <b>Mục tiêu:</b> Thu thập, xử lý và cung cấp dữ liệu vị trí vùng trồng
        nhằm chứng minh không liên quan đến mất rừng sau 31/12/2020 — theo đúng
        chuẩn kỹ thuật của hệ thống EUDR (Quy định EU 2023/1115).
        </div>

        <h3>🔷 1. Bản chất & Mục tiêu quy trình GIS phục vụ EUDR</h3>
        <table border='1' cellpadding='5' style='border-collapse:collapse;width:100%;'>
            <tr style='background:#1B5E20;color:white;'>
                <th>Bước</th><th>Mục tiêu</th><th>Bản chất công việc</th>
            </tr>
            <tr><td>Thu thập</td><td>Ghi nhận vùng trồng</td><td>Dùng GPS, vẽ polygon hoặc point</td></tr>
            <tr><td>Làm sạch</td><td>Loại sai sót kỹ thuật</td><td>Kiểm tra hình học, sai tọa độ</td></tr>
            <tr><td>Chuẩn hóa</td><td>Tuân thủ định dạng EUDR</td><td>Sử dụng EPSG:4326, định danh đúng</td></tr>
            <tr><td>Gửi đi</td><td>Giao nộp đúng chuẩn</td><td>Kiểm tra rủi ro phá rừng, đính kèm hồ sơ</td></tr>
        </table>

        <h3>🔷 2. Loại dữ liệu cần thu thập</h3>
        <ul>
            <li><b>Point:</b> Lô nhỏ dưới 4 ha → 1 tọa độ [long, lat]</li>
            <li><b>Polygon:</b> Lô từ 4 ha trở lên → chuỗi điểm tạo đa giác khép kín</li>
        </ul>

        <h3>🔷 3. Cấu trúc dữ liệu bắt buộc</h3>
        <table border='1' cellpadding='5' style='border-collapse:collapse;width:100%;'>
            <tr style='background:#1B5E20;color:white;'>
                <th>Trường</th><th>Ý nghĩa</th><th>Kiểu dữ liệu</th><th>Vai trò</th>
            </tr>
            <tr><td><b>Plot_ID</b></td><td>Mã số lô/vùng trồng</td><td>Chuỗi (text)</td>
                <td>Dùng để truy xuất và định danh lô</td></tr>
            <tr><td><b>Species</b></td><td>Loài cây trồng</td><td>Chuỗi (text)</td>
                <td>Thông tin nông học, có thể khai báo</td></tr>
            <tr><td><b>Lat</b></td><td>Vĩ độ của điểm đo</td><td>Số thực (float)</td>
                <td>Phần của geometry.coordinates</td></tr>
            <tr><td><b>Long</b></td><td>Kinh độ của điểm đo</td><td>Số thực (float)</td>
                <td>Phần của geometry.coordinates</td></tr>
            <tr><td><b>Area</b></td><td>Diện tích vùng trồng (ha)</td><td>Số thực (float)</td>
                <td>Bắt buộc trong properties.Area</td></tr>
            <tr><td><b>Date</b></td><td>Ngày thu thập dữ liệu</td><td>Chuỗi (yyyy-mm-dd)</td>
                <td>Phục vụ kiểm tra, xác minh hiện trường</td></tr>
            <tr><td><b>Farmer ID</b></td><td>Mã định danh người nông dân/hộ sản xuất</td><td>Chuỗi (text)</td>
                <td>Dùng trong ProducerName</td></tr>
            <tr><td><b>ProducerCountry</b></td><td>Mã quốc gia sản xuất (chuẩn ISO2, ví dụ "VN")</td><td>Chuỗi (2 ký tự)</td>
                <td>Bắt buộc trong properties</td></tr>
        </table>

        <h3>🔷 4. Yêu cầu kỹ thuật EUDR</h3>
        <ul>
            <li><b>Hệ tọa độ:</b> WGS84 (EPSG:4326)</li>
            <li><b>Định dạng:</b> [longitude, latitude] (GeoJSON RFC 7946)</li>
            <li><b>Độ chính xác:</b> Tối thiểu 6 chữ số thập phân (ví dụ: 105.123456, 21.567890)</li>
            <li><b>Đa giác:</b> Phải đóng kín, không tự cắt</li>
            <li><b>Kích thước file:</b> Tối đa 25 MB</li>
        </ul>

        <h3>🔷 5. Quy trình sử dụng công cụ</h3>
        <ol>
            <li><b>Bước 1 — Chọn lớp:</b> Chọn lớp vector chứa dữ liệu lô đất trong QGIS</li>
            <li><b>Bước 2 — Ánh xạ trường:</b> Ánh xạ các trường dữ liệu nguồn sang trường EUDR
                (Plot_ID, Species, Area, Date, FarmerID, ProducerCountry...)</li>
            <li><b>Bước 3 — Xem thống kê:</b> Nhấn "Xem thống kê" để kiểm tra phân loại
                Point/Polygon và phát hiện lỗi hình học</li>
            <li><b>Bước 4 — Xuất file:</b> Nhấn "Xuất GeoJSON" để lưu file chuẩn EUDR</li>
        </ol>

        <h3 style='color:#C62828;'>⚠️ 6. Các lỗi phổ biến và cách khắc phục</h3>
        <table border='1' cellpadding='5' style='border-collapse:collapse;width:100%;'>
            <tr style='background:#C62828;color:white;'>
                <th>STT</th><th>Lỗi kỹ thuật</th><th>Nguyên nhân & Cách xử lý</th>
            </tr>
            <tr><td>1</td><td>Polygon không khép kín</td><td>Thêm điểm cuối = điểm đầu</td></tr>
            <tr><td>2</td><td>Dữ liệu sai hệ tọa độ</td><td>Chuyển về EPSG:4326 (decimal degrees)</td></tr>
            <tr><td>3</td><td>Có lỗ (hole) trong polygon</td><td>Tách thành 2 polygon thay vì vùng rỗng</td></tr>
            <tr><td>4</td><td>Thuộc tính sai chính tả</td><td>Đảm bảo tên: ProductionPlace, Area, ProducerCountry</td></tr>
            <tr><td>5</td><td>Area bị để dạng chuỗi</td><td>Ghi Area: 3.2 thay vì "3.2"</td></tr>
            <tr><td>6</td><td>Dữ liệu vượt 25MB</td><td>Đơn giản hóa hình học (Simplify), tách thành nhiều file</td></tr>
            <tr><td>7</td><td>Tọa độ trùng nhau do làm tròn</td><td>Kiểm tra trước khi xuất file, dùng 6 số thập phân</td></tr>
            <tr><td>8</td><td>LineString / GeometryCollection</td><td>Không hợp lệ với EUDR, chỉ dùng Point/Polygon</td></tr>
        </table>

        <h3>🔷 7. Kiểm tra & Xác minh</h3>
        <div style='background:#FFF3E0;padding:10px;border-radius:6px;
        border-left:5px solid #FF8F00;margin:8px 0;'>
        <b>Trên máy tính:</b>
        <ul style='margin:5px 0;'>
            <li>QGIS: dùng Fix Geometry, Topology Checker</li>
            <li>geojson.io: Kéo thả để xem nhanh cấu trúc</li>
            <li>GFW / EarthMap: kiểm tra chồng lấn rừng sau 31/12/2020</li>
        </ul>
        <b>Tại thực địa:</b>
        <ul style='margin:5px 0;'>
            <li>Đối chiếu điểm thực tế bằng app GPS</li>
            <li>So sánh với polygon đã đo</li>
            <li>Ghi nhận sai khác → hiệu chỉnh lại dữ liệu</li>
        </ul>
        </div>

        <h3>🔷 8. Quy ước đặt tên file</h3>
        <div style='background:#E3F2FD;padding:10px;border-radius:6px;margin:8px 0;'>
        <b>Tên file:</b> <code>ID_Farmer_VN_Acacia_2025-06.geojson</code><br>
        <b>Định dạng:</b> .geojson<br>
        <b>Hệ tọa độ:</b> EPSG:4326 (WGS84)<br>
        <b>Nên lưu trữ kèm:</b> Ảnh GPS (EXIF), Biên bản đo đạc, Mã lô sản phẩm tương ứng
        </div>
        </div>
        """
    else:
        return """
        <div style='font-family:Arial;padding:10px;line-height:1.6;'>
        <h2 style='color:#1B5E20;'>📘 EUDR GeoJSON Export Guide</h2>

        <div style='background:#E8F5E9;padding:12px;border-radius:6px;
        border-left:5px solid #1B5E20;margin:10px 0;'>
        <b>Objective:</b> Collect, process, and provide geolocation data for production
        plots to prove no deforestation link after 31/12/2020 — in compliance with
        the EU Deforestation Regulation (EU 2023/1115).
        </div>

        <h3>🔷 1. GIS Workflow for EUDR Compliance</h3>
        <table border='1' cellpadding='5' style='border-collapse:collapse;width:100%;'>
            <tr style='background:#1B5E20;color:white;'>
                <th>Step</th><th>Objective</th><th>Work Description</th>
            </tr>
            <tr><td>Collect</td><td>Record production plots</td><td>Use GPS, draw polygon or point</td></tr>
            <tr><td>Clean</td><td>Remove technical errors</td><td>Check geometry, fix coordinates</td></tr>
            <tr><td>Standardize</td><td>Comply with EUDR format</td><td>Use EPSG:4326, correct identifiers</td></tr>
            <tr><td>Submit</td><td>Deliver compliant data</td><td>Check deforestation risk, attach documentation</td></tr>
        </table>

        <h3>🔷 2. Data Types Required</h3>
        <ul>
            <li><b>Point:</b> Small plots under 4 ha → single coordinate [long, lat]</li>
            <li><b>Polygon:</b> Plots 4 ha or larger → chain of points forming a closed polygon</li>
        </ul>

        <h3>🔷 3. Mandatory Data Structure</h3>
        <table border='1' cellpadding='5' style='border-collapse:collapse;width:100%;'>
            <tr style='background:#1B5E20;color:white;'>
                <th>Field</th><th>Meaning</th><th>Data Type</th><th>Role</th>
            </tr>
            <tr><td><b>Plot_ID</b></td><td>Plot/production area code</td><td>String (text)</td>
                <td>For traceability and identification</td></tr>
            <tr><td><b>Species</b></td><td>Crop species</td><td>String (text)</td>
                <td>Agronomic information, declarable</td></tr>
            <tr><td><b>Lat</b></td><td>Latitude of measurement point</td><td>Float</td>
                <td>Part of geometry.coordinates</td></tr>
            <tr><td><b>Long</b></td><td>Longitude of measurement point</td><td>Float</td>
                <td>Part of geometry.coordinates</td></tr>
            <tr><td><b>Area</b></td><td>Production area (ha)</td><td>Float</td>
                <td>Required in properties.Area</td></tr>
            <tr><td><b>Date</b></td><td>Data collection date</td><td>String (yyyy-mm-dd)</td>
                <td>For field verification and validation</td></tr>
            <tr><td><b>Farmer ID</b></td><td>Farmer/producer identifier</td><td>String (text)</td>
                <td>Used in ProducerName</td></tr>
            <tr><td><b>ProducerCountry</b></td><td>Production country (ISO2, e.g. "VN")</td><td>String (2 chars)</td>
                <td>Required in properties</td></tr>
        </table>

        <h3>🔷 4. EUDR Technical Requirements</h3>
        <ul>
            <li><b>CRS:</b> WGS84 (EPSG:4326)</li>
            <li><b>Format:</b> [longitude, latitude] (GeoJSON RFC 7946)</li>
            <li><b>Precision:</b> Minimum 6 decimal digits (e.g., 105.123456, 21.567890)</li>
            <li><b>Polygons:</b> Must be closed, no self-intersections</li>
            <li><b>File size:</b> Maximum 25 MB</li>
        </ul>

        <h3>🔷 5. Step-by-Step Workflow</h3>
        <ol>
            <li><b>Step 1 — Select Layer:</b> Choose the vector layer containing plot data in QGIS</li>
            <li><b>Step 2 — Map Fields:</b> Map source data fields to EUDR fields
                (Plot_ID, Species, Area, Date, FarmerID, ProducerCountry...)</li>
            <li><b>Step 3 — Preview Stats:</b> Click "Preview Statistics" to check
                Point/Polygon classification and detect geometry errors</li>
            <li><b>Step 4 — Export:</b> Click "Export GeoJSON" to save the EUDR-compliant file</li>
        </ol>

        <h3 style='color:#C62828;'>⚠️ 6. Common Errors and Fixes</h3>
        <table border='1' cellpadding='5' style='border-collapse:collapse;width:100%;'>
            <tr style='background:#C62828;color:white;'>
                <th>#</th><th>Technical Error</th><th>Cause & Fix</th>
            </tr>
            <tr><td>1</td><td>Unclosed polygon</td><td>Add last point = first point</td></tr>
            <tr><td>2</td><td>Wrong CRS</td><td>Reproject to EPSG:4326 (decimal degrees)</td></tr>
            <tr><td>3</td><td>Polygon has holes</td><td>Split into 2 separate polygons</td></tr>
            <tr><td>4</td><td>Misspelled attribute names</td><td>Ensure: ProductionPlace, Area, ProducerCountry</td></tr>
            <tr><td>5</td><td>Area stored as string</td><td>Write Area: 3.2 not "3.2"</td></tr>
            <tr><td>6</td><td>File exceeds 25 MB</td><td>Simplify geometry, split into multiple files</td></tr>
            <tr><td>7</td><td>Duplicate coordinates from rounding</td><td>Check before export, use 6 decimal places</td></tr>
            <tr><td>8</td><td>LineString / GeometryCollection</td><td>Invalid for EUDR, use Point/Polygon only</td></tr>
        </table>

        <h3>🔷 7. Verification & Validation</h3>
        <div style='background:#FFF3E0;padding:10px;border-radius:6px;
        border-left:5px solid #FF8F00;margin:8px 0;'>
        <b>On computer:</b>
        <ul style='margin:5px 0;'>
            <li>QGIS: Use Fix Geometry, Topology Checker</li>
            <li>geojson.io: Drag & drop for quick structure review</li>
            <li>GFW / EarthMap: Check for forest overlap after 31/12/2020</li>
        </ul>
        <b>In the field:</b>
        <ul style='margin:5px 0;'>
            <li>Verify actual points with GPS app</li>
            <li>Compare with measured polygon</li>
            <li>Record discrepancies → correct data</li>
        </ul>
        </div>

        <h3>🔷 8. File Naming Convention</h3>
        <div style='background:#E3F2FD;padding:10px;border-radius:6px;margin:8px 0;'>
        <b>Filename:</b> <code>FarmerID_VN_Acacia_2025-06.geojson</code><br>
        <b>Format:</b> .geojson<br>
        <b>CRS:</b> EPSG:4326 (WGS84)<br>
        <b>Recommended attachments:</b> GPS photos (EXIF), survey records, product lot codes
        </div>
        </div>
        """
