/// Price Policy Local DataSource
///
/// Handles all local data operations for price policy documents.
/// Currently provides mock data for development and testing.
/// Will be extended to use Hive cache when backend API is available.
library;

import 'package:worker/features/price_policy/data/models/price_document_model.dart';

/// Price Policy Local Data Source
///
/// Provides mock data for price policy documents.
/// In production, this will cache data from the remote API.
class PricePolicyLocalDataSource {
  /// Get all price policy documents
  ///
  /// Returns a list of all documents from mock data.
  /// In production, this will fetch from Hive cache.
  Future<List<PriceDocumentModel>> getAllDocuments() async {
    // Simulate network delay
    await Future<void>.delayed(const Duration(milliseconds: 300));

    return _mockDocuments;
  }

  /// Get documents by category
  ///
  /// Returns filtered list of documents matching the [category].
  Future<List<PriceDocumentModel>> getDocumentsByCategory(
    String category,
  ) async {
    // Simulate network delay
    await Future<void>.delayed(const Duration(milliseconds: 200));

    return _mockDocuments
        .where((doc) => doc.category.toLowerCase() == category.toLowerCase())
        .toList();
  }

  /// Get a specific document by ID
  ///
  /// Returns the document if found, null otherwise.
  Future<PriceDocumentModel?> getDocumentById(String documentId) async {
    // Simulate network delay
    await Future<void>.delayed(const Duration(milliseconds: 100));

    try {
      return _mockDocuments.firstWhere((doc) => doc.id == documentId);
    } catch (e) {
      return null;
    }
  }

  /// Check if cache is valid
  ///
  /// Returns true if cached data is still valid.
  /// Currently always returns false since we're using mock data.
  Future<bool> isCacheValid() async {
    // TODO: Implement cache validation when using Hive
    return false;
  }

  /// Cache documents locally
  ///
  /// Saves documents to Hive for offline access.
  /// Currently not implemented (using mock data).
  Future<void> cacheDocuments(List<PriceDocumentModel> documents) async {
    // TODO: Implement Hive caching when backend API is ready
  }

  /// Clear cached documents
  ///
  /// Removes all cached documents from Hive.
  /// Currently not implemented (using mock data).
  Future<void> clearCache() async {
    // TODO: Implement cache clearing when using Hive
  }

  /// Mock documents matching HTML design
  ///
  /// This data will be replaced with real API data in production.
  static final List<PriceDocumentModel> _mockDocuments = [
    // Policy documents (Chính sách giá)
    const PriceDocumentModel(
      id: 'policy-eurotile-10-2025',
      title: 'Chính sách giá Eurotile T10/2025',
      description:
          'Chính sách giá mới nhất cho sản phẩm gạch Eurotile, áp dụng từ tháng 10/2025',
      publishedDate: '2025-10-01T00:00:00.000Z',
      documentType: 'pdf',
      category: 'policy',
      downloadUrl: '/documents/policy-eurotile-10-2025.pdf',
      fileSize: '2.5 MB',
    ),
    const PriceDocumentModel(
      id: 'policy-vasta-10-2025',
      title: 'Chính sách giá Vasta Stone T10/2025',
      description:
          'Chính sách giá đá tự nhiên Vasta Stone, hiệu lực từ tháng 10/2025',
      publishedDate: '2025-10-01T00:00:00.000Z',
      documentType: 'pdf',
      category: 'policy',
      downloadUrl: '/documents/policy-vasta-10-2025.pdf',
      fileSize: '1.8 MB',
    ),
    const PriceDocumentModel(
      id: 'policy-dealer-2025',
      title: 'Chính sách chiết khấu đại lý 2025',
      description:
          'Chương trình chiết khấu và ưu đãi dành cho đại lý, thầu thợ',
      publishedDate: '2025-09-15T00:00:00.000Z',
      documentType: 'pdf',
      category: 'policy',
      downloadUrl: '/documents/policy-dealer-2025.pdf',
      fileSize: '3.2 MB',
    ),
    const PriceDocumentModel(
      id: 'policy-payment-2025',
      title: 'Điều kiện thanh toán & giao hàng',
      description:
          'Điều khoản thanh toán, chính sách giao hàng và bảo hành sản phẩm',
      publishedDate: '2025-08-01T00:00:00.000Z',
      documentType: 'pdf',
      category: 'policy',
      downloadUrl: '/documents/policy-payment-2025.pdf',
      fileSize: '1.5 MB',
    ),

    // Price list documents (Bảng giá)
    const PriceDocumentModel(
      id: 'pricelist-granite-2025',
      title: 'Bảng giá Gạch Granite Eurotile 2025',
      description:
          'Bảng giá chi tiết toàn bộ sản phẩm gạch granite, kích thước 60x60, 80x80, 120x120',
      publishedDate: '2025-10-01T00:00:00.000Z',
      documentType: 'excel',
      category: 'priceList',
      downloadUrl: '/documents/pricelist-granite-2025.xlsx',
      fileSize: '850 KB',
    ),
    const PriceDocumentModel(
      id: 'pricelist-ceramic-2025',
      title: 'Bảng giá Gạch Ceramic Eurotile 2025',
      description: 'Bảng giá gạch ceramic vân gỗ, vân đá, vân xi măng các loại',
      publishedDate: '2025-10-01T00:00:00.000Z',
      documentType: 'excel',
      category: 'priceList',
      downloadUrl: '/documents/pricelist-ceramic-2025.xlsx',
      fileSize: '720 KB',
    ),
    const PriceDocumentModel(
      id: 'pricelist-stone-2025',
      title: 'Bảng giá Đá tự nhiên Vasta Stone 2025',
      description:
          'Bảng giá đá marble, granite tự nhiên nhập khẩu, kích thước tấm lớn',
      publishedDate: '2025-10-01T00:00:00.000Z',
      documentType: 'excel',
      category: 'priceList',
      downloadUrl: '/documents/pricelist-stone-2025.xlsx',
      fileSize: '950 KB',
    ),
    const PriceDocumentModel(
      id: 'pricelist-accessories-2025',
      title: 'Bảng giá Phụ kiện & Vật liệu 2025',
      description:
          'Giá keo dán, chà ron, nẹp nhựa, nẹp inox và các phụ kiện thi công',
      publishedDate: '2025-09-15T00:00:00.000Z',
      documentType: 'excel',
      category: 'priceList',
      downloadUrl: '/documents/pricelist-accessories-2025.xlsx',
      fileSize: '640 KB',
    ),
    const PriceDocumentModel(
      id: 'pricelist-outdoor-2025',
      title: 'Bảng giá Gạch Outdoor & Chống trơn 2025',
      description:
          'Bảng giá sản phẩm outdoor, gạch chống trơn dành cho ngoại thất',
      publishedDate: '2025-09-01T00:00:00.000Z',
      documentType: 'excel',
      category: 'priceList',
      downloadUrl: '/documents/pricelist-outdoor-2025.xlsx',
      fileSize: '780 KB',
    ),
  ];
}
