from django.contrib.auth.models import User
from django.core.validators import MinValueValidator, MaxValueValidator
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField


class Store(models.Model):
    name = models.CharField(max_length=128)
    address = models.CharField(max_length=128)
    telephone = PhoneNumberField()

    def __str__(self):
        return f'{self.name}-{self.address}'


class Product(models.Model):
    name = models.CharField(max_length=128)

    # photo

    def __str__(self):
        return f'{self.name}'


class Customer(models.Model):
    name = models.CharField(max_length=128)
    address = models.CharField(max_length=128, blank=True)
    telephone = PhoneNumberField(blank=True)
    email = models.CharField(max_length=128, blank=True)
    social_media = models.CharField(max_length=128, blank=True)

    def __str__(self):
        return f'{self.name}:{self.telephone}'


class Order(models.Model):
    STATUS_OPTIONS = (
        ('ΝΕΑ', 'ΝΕΑ'),
        ('ΕΠΕ', 'ΥΠΟ ΕΠΕΞΕΡΓΑΣΙΑ'),
        ('ΕΤΜ', 'ΕΤΟΙΜΗ'),
    )
    DELIVERY_OPTIONS = (
        ('ΠΑΡΑΛΑΒΗ ΑΠΟ ΚΑΤΑΣΤΗΜΑ', 'ΠΑΡΑΛΑΒΗ ΑΠΟ ΚΑΤΑΣΤΗΜΑ'),
        ('ΑΠΟΣΤΟΛΗ', 'ΑΠΟΣΤΟΛΗ'),
    )
    order_status = models.CharField(max_length=3, choices=STATUS_OPTIONS, default="ΝΕΑ")

    customer_name = models.CharField(max_length=128)
    customer_address = models.CharField(max_length=128, blank=True)
    customer_telephone = models.CharField(max_length=128)
    customer_email = models.CharField(max_length=128, blank=True)
    customer_social_media = models.CharField(max_length=128, blank=True)

    #customer = models.ForeignKey(Customer, on_delete=models.CASCADE)

    order_date = models.DateTimeField(auto_now_add=True)
    delivery_date = models.DateField()
    delivery = models.CharField(max_length=45, choices=DELIVERY_OPTIONS, default="ΠΑΡΑΛΑΒΗ ΑΠΟ ΚΑΤΑΣΤΗΜΑ")
    store = models.ForeignKey(Store, on_delete=models.CASCADE)
    order_products = models.ManyToManyField('Product', through='OrderProduct', related_name='+', blank=True)
    order_info = models.CharField(max_length=512, blank=True)

    def __str__(self):
        return f'{self.id}:{self.customer_name, self.customer_telephone}, {self.store}, {self.order_date.strftime("%d/%m/%Y %H:%M")}, {self.delivery_date.strftime("%d/%m/%Y")}'


class OrderProduct(models.Model):
    CAKE_TYPES = (
        ('KARDASIS', 'KARDASIS'),
        ('PAN DÉCOR', 'PAN DÉCOR'),
        ('ΦΩΤΟΓΡΑΦΙΑ', 'ΦΩΤΟΓΡΑΦΙΑ'),
    )

    COLOR_OPTIONS = (
        ('ΛΕΥΚΟ', 'ΛΕΥΚΟ'),
        ('ΡΟΖ', 'ΡΟΖ'),
        ('ΣΙΕΛ', 'ΣΙΕΛ'),
        ('ΚΙΤΡΙΝΟ', 'ΚΙΤΡΙΝΟ'),
        ('ΠΡΑΣΙΝΟ', 'ΠΡΑΣΙΝΟ'),
        ('ΚΟΚΚΙΝΟ', 'ΚΟΚΚΙΝΟ'),
        ('ΜΠΛΕ', 'ΜΠΛΕ'),
        ('ΜΑΥΡΟ', 'ΜΑΥΡΟ'),
        ('ΣΕΡΑΝΟ', 'ΣΕΡΑΝΟ'),
        ('ΚΑΦΕ', 'ΚΑΦΕ'),
        ('ΒΕΡΑΜΑΝ', 'ΒΕΡΑΜΑΝ'),
        ('ΛΙΛΑ', 'ΛΙΛΑ'),
        ('ΦΟΥΞ', 'ΦΟΥΞ'),
        ('ΔΙΑΦΑΝΟ', 'ΔΙΑΦΑΝΟ'),
        ('ΆΛΛΟ', 'ΆΛΛΟ'),
    )

    CAKE_FLAVORS = (
        ('Ανάμεικτη', 'Ανάμεικτη '),
        ('Αγριοκέρασο', 'Αγριοκέρασο'),
        ('Ανάμεικτη  Αγριοκέρασο', 'Ανάμεικτη  Αγριοκέρασο'),
        ('Μπισκότο', 'Μπισκότο'),
        ('Oreo', 'Oreo'),
        ('Kinder', 'Kinder'),
        ('Σοκολάτα Φράουλα', 'Σοκολάτα Φράουλα'),
        ('Ferrero', 'Ferrero'),
        ('Nutella', 'Nutella'),
        ('Σοκολάτα Μπισκότο', 'Σοκολάτα Μπισκότο'),
        ('Λεμονί', 'Λεμονί'),
        ('Μπανάνα', 'Μπανάνα '),
        ('Σοκολατίνα', 'Σοκολατίνα'),
        ('Τιραμισού', 'Τιραμισού'),
        ('Φράουλα Κρέμα', 'Φράουλα Κρέμα'),
        ('Δούκισσα μπισκότο', 'Δούκισσα μπισκότο'),
        ('Καραμέλα', 'Καραμέλα'),
        ('Ανάμεικτη Σαμπάνια', 'Ανάμεικτη Σαμπάνια'),
        ('Γιαούρτι Ανανάς', 'Γιαούρτι Ανανάς '),
    )

    CUP_FLAVORS = (
        ('Προφιτερόλ', 'Προφιτερόλ'),
        ('Εκμέκ', 'Εκμέκ'),
        ('Banoffee', 'Banoffee'),
        ('Τιραμισού Brownies', 'Τιραμισού Brownies'),
        ('Τσιζκεικ', 'Τσιζκεικ'),
        ('Lemon pie', 'Lemon pie'),
        ('Φερρέρο Brownies', 'Φερρέρο Brownies'),
        ('Μους Brownies', 'Μους Brownies'),
        ('Lila Pause', 'Lila Pause'),
    )

    CUP_TYPES = (
        ('ΚΥΠΕΛΛΟ', 'ΚΥΠΕΛΛΟ'),
        ('ΤΕΤΡΑΓΩΝΟ ', 'ΤΕΤΡΑΓΩΝΟ '),
        ('ΣΤΡΟΓΓΥΛΟ', 'ΣΤΡΟΓΓΥΛΟ'),
        ('ΣΦΗΝΑΚΙ', 'ΣΦΗΝΑΚΙ'),
    )


    CANDY_BAR_TYPE = (
        ('Cup cake με επικάλυψη και διακοσμητικά ζαχαρόπαστας', 'Cup cake με επικάλυψη και διακοσμητικά ζαχαρόπαστας'),
        ('Cup cakes με ζαχαρόπαστα και εκτύπωση', 'Cup cakes με ζαχαρόπαστα και εκτύπωση'),
        ('Cup cakes με χρωματιστή βουτυρόκρεμα', 'Cup cakes με χρωματιστή βουτυρόκρεμα'),
        ('Donuts με χρωματιστό γλάσσο', 'Donuts με χρωματιστό γλάσσο'),
        ('Pop cakes ', 'Pop cakes '),
        ('Μπισκότα με επικάλυψη ζαχαρόπαστας ', 'Μπισκότα με επικάλυψη ζαχαρόπαστας '),
        ('Μπισκότα με επικάλυψη και διακοσμητικά ζαχαρόπαστας', 'Μπισκότα με επικάλυψη και διακοσμητικά ζαχαρόπαστας'),
        ('Μπισκότα με επικάλυψη χρωματιστής σοκολάτας', 'Μπισκότα με επικάλυψη χρωματιστής σοκολάτας'),
        ('Μπισκότα σε σχήμα', 'Μπισκότα σε σχήμα'),
        ('Στρόγγυλα μπισκότα με επικάλυψη ζαχαρόπαστας και εκτύπωση ', 'Στρόγγυλα μπισκότα με επικάλυψη ζαχαρόπαστας και εκτύπωση '),
        ('Χωνάκι παγωτού με πολύχρωμα ζαχαρωτά τυλιγμένα σε ζελατίνα', 'Χωνάκι παγωτού με πολύχρωμα ζαχαρωτά τυλιγμένα σε ζελατίνα'),
        ('Μπεζεδάκια πολύχρωμα γεμιστά με κρέμα ', 'Μπεζεδάκια πολύχρωμα γεμιστά με κρέμα '),
        ('Μπολ με πολύχρωμα Marshmallows', 'Μπολ με πολύχρωμα Marshmallows'),
        ('Μπολ με κουφέτα ', 'Μπολ με κουφέτα '),
        ('Μπολ με μίνι σοκολάτες (Twix, Bueno, Derby, Lacta, Σοκοφρέτα)', 'Μπολ με μίνι σοκολάτες (Twix, Bueno, Derby, Lacta, Σοκοφρέτα)'),
        ('Μπολ με πολύχρωμους μπεζέδες', 'Μπολ με πολύχρωμους μπεζέδες'),
        ('Γλειφιτζούρια spiral (ροζ, γαλάζια)', 'Γλειφιτζούρια spiral (ροζ, γαλάζια)'),
    )

    CANDY_BAR_DECOR = (
        ('ΔΙΑΚΟΣΜΗΣΗ', 'ΔΙΑΚΟΣΜΗΣΗ'),
        ('ΠΟΛΥΧΡΩΜΗ ΤΡΟΥΦΑ', 'ΠΟΛΥΧΡΩΜΗ ΤΡΟΥΦΑ'),
        ('ΧΡΩΜΑΤΙΣΤΗ ΤΡΟΥΦΑ', 'ΧΡΩΜΑΤΙΣΤΗ ΤΡΟΥΦΑ'),
        ('ΓΡΑΜΜΕΣ ΣΟΚΟΛΑΤΑΣ', 'ΓΡΑΜΜΕΣ ΣΟΚΟΛΑΤΑΣ'),
        ('ΆΛΛΟ', 'ΆΛΛΟ'),
    )

    CANDY_BAR_WRAP = (
        ('ΤΥΛΙΓΜΕΝΑ', 'ΤΥΛΙΓΜΕΝΑ'),
        ('ΑΤΥΛΙΧΤΑ', 'ΑΤΥΛΙΧΤΑ'),
    )

    CREAM_3D = (
        ('ΝΑΙ', 'ΝΑΙ'),
        ('ΟΧΙ', 'ΟΧΙ'),
    )

    ENGAMENT_TYPE = (
        ('ΑΡΡΑΒΩΝΑΣ', 'ΑΡΡΑΒΩΝΑΣ'),
        ('ΓΑΜΟΣ', 'ΓΑΜΟΣ'),
    )

    ENGAMENT_CAKE_PIECES = (
        ('ΑΤΟΜΙΚΑ', 'ΑΤΟΜΙΚΑ'),
        ('ΚΥΠΕΛΛΟ', 'ΚΥΠΕΛΛΟ'),
        ('ΣΦΗΝΑΚΙ', 'ΣΦΗΝΑΚΙ'),
        ('ΆΛΛΟ', 'ΆΛΛΟ'),
    )

    ENGAMENT_CAKE_GLAZE = (
        ('ΓΛΑΣΣΟ', 'ΓΛΑΣΣΟ'),
        ('ΣΑΝΤΙΓΥ', 'ΣΑΝΤΙΓΥ'),
    )

    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    amount = models.FloatField(validators=[MinValueValidator(0.01), MaxValueValidator(999)])

    #az = 'ΚΙΛΑ	ΓΕΥΣΗ	KARDASIS 	Νο	ΧΡΩΜΑ	ΦΥΤΙΛΑΚΙ	ΠΑΡΑΤΗΡΗΣΕΙΣ'
    cake_type = models.CharField(max_length=45, choices=CAKE_TYPES, blank=True, null=True)
    cake_type_num = models.FloatField(max_length=128, default="0", blank=True, null=True)
    cake_color = models.CharField(max_length=45, choices=COLOR_OPTIONS, blank=True, null=True)
    cake_color_other = models.CharField(max_length=128, blank=True, null=True)
    fyt_color = models.CharField(max_length=45, choices=COLOR_OPTIONS, blank=True, null=True)
    fyt_color_other = models.CharField(max_length=128, blank=True, null=True)
    cake_flavor = models.CharField(max_length=45, choices=CAKE_FLAVORS, blank=True, null=True)
    cake_img = models.ImageField(blank=True, null=True)
    #az = 'ΜΕΓΕΘΟΣ	ΥΨΟΣ	ΓΕΥΣΗ	ΠΑΡΑΤΗΡΗΣΕΙΣ'
    cream_cake_3d = models.CharField(max_length=45, choices=CREAM_3D, default="ΟΧΙ", blank=True)
    cream_cake_height = models.FloatField(max_length=128, default="0", blank=True, null=True)
    cream_cake_img = models.ImageField(blank=True, null=True)

    #az = 'ΓΑΜΟΣ	ΒΑΣΗ	ΤΕΜΑΧΙΑ	ΓΕΥΣΗ	ΠΑΡΑΤΗΡΗΣΕΙΣ'
    engagement_cake_type = models.CharField(max_length=45, choices=ENGAMENT_TYPE, blank=True, null=True)
    engagement_cake_base = models.CharField(max_length=128, blank=True, null=True)
    engagement_cake_pcs = models.CharField(max_length=45, choices=ENGAMENT_CAKE_PIECES, blank=True, null=True)
    engagement_cake_pcs_other = models.CharField(max_length=128, blank=True, null=True)
    engagement_cake_glaze = models.CharField(max_length=45, choices=ENGAMENT_CAKE_GLAZE, blank=True, null=True)

    #az = 'ΤΕΜΑΧΙΑ	ΓΕΥΣΗ	ΚΥΠΕΛΛΟ	ΧΡΩΜΑ	ΤΕΜΑΧΙΑ	ΧΡΩΜΑ	ΔΙΑΚΟΣΜΗΣΗ	ΤΥΛΙΓΜΕΝΑ	ΠΑΡΑΤΗΡΗΣΕΙΣ'
    cup_flavor = models.CharField(max_length=45, choices=CUP_FLAVORS, blank=True, null=True)
    cup_color = models.CharField(max_length=45, choices=COLOR_OPTIONS, blank=True, null=True)
    cup_color_other = models.CharField(max_length=128, blank=True, null=True)
    cup_type = models.CharField(max_length=45, choices=CUP_TYPES, blank=True, null=True)

    candy_bar_type = models.CharField(max_length=61, choices=CANDY_BAR_TYPE, blank=True, null=True)
    candy_bar_decor = models.CharField(max_length=45, choices=CANDY_BAR_DECOR, blank=True, null=True)
    candy_bar_decor_other = models.CharField(max_length=128, blank=True, null=True)
    candy_bar_wrap = models.CharField(max_length=45, choices=CANDY_BAR_WRAP, blank=True, null=True)

    info = models.CharField(max_length=512, blank=True, null=True)

    def __str__(self):
        return f'{self.product}'
