from rest_framework import serializers
from .models import *


class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = '__all__'

class SaleRepSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sale_Rep
        fields = '__all__'

        
class WorkSiteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Work_Site
        fields = '__all__'

class ShippingAddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Shipping_Address
        fields = '__all__'

class BillingAddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Billing_Address
        fields = '__all__'

class UnitSerializer(serializers.ModelSerializer):
    class Meta:
        model = Unit
        fields = '__all__'

class APIUnitSerializer(serializers.ModelSerializer):
    lower_name = serializers.CharField()
    refunit = UnitSerializer()
    class Meta:
        model = Unit
        fields = '__all__'

class ProductSerializer(serializers.ModelSerializer):
    unit = UnitSerializer()
    class Meta:
        model = Product
        fields = '__all__'

class ProductCategorySerializer(serializers.ModelSerializer):
    product = ProductSerializer(many=True)
    class Meta:
        model = Product_Category
        fields = '__all__'

class InvoiceDetailSerializer(serializers.ModelSerializer):
    product = ProductSerializer()
    class Meta:
        model = Invoice_Detail
        fields = '__all__'
        

class QuotationDetailSerializer(serializers.ModelSerializer):
    product = ProductSerializer()
    class Meta:
        model = Quotation_Detail
        fields = '__all__'

class InvoicePaymentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Invoice_Payment
        fields = '__all__'

class QuotationSerializer(serializers.ModelSerializer):
    sale_rep  = SaleRepSerializer()
    work_site = WorkSiteSerializer()
    customer = CustomerSerializer()
    detail = InvoiceDetailSerializer(many=True)
    # shipping_address = ShippingAddressSerializer()
    # billing_address = BillingAddressSerializer()

    class Meta:
        model = Invoice
        fields = '__all__'

class InvoiceSerializer(serializers.ModelSerializer):
    sale_rep  = SaleRepSerializer()
    quotation = QuotationSerializer()
    work_site = WorkSiteSerializer()
    customer = CustomerSerializer()
    detail = InvoiceDetailSerializer(many=True)
    payment = InvoicePaymentSerializer(many=True)
    # shipping_address = ShippingAddressSerializer()
    # billing_address = BillingAddressSerializer()

    class Meta:
        model = Invoice
        fields = '__all__'




class InvoicesSerializer(serializers.ModelSerializer):
    sale_rep  = SaleRepSerializer()
    quotation = QuotationSerializer()
    work_site = WorkSiteSerializer()
    customer = CustomerSerializer()
    shipping_address = ShippingAddressSerializer()
    billing_address = BillingAddressSerializer()

    class Meta:
        model = Invoice
        fields = '__all__'

class InvoiceDetailsSerializer(serializers.ModelSerializer):
    product = ProductSerializer()
    invoice = InvoicesSerializer()
    class Meta:
        model = Invoice_Detail
        fields = '__all__'