# -*- coding: utf-8 -*-
from __future__ import absolute_import
from flask_sqlalchemy.query import Query as BaseQuery
from dostadmin import db
from dostadmin.mixins import TimestampMixin
from dostadmin.db_model import Timecategory


class UserRegistrationDataQuery(BaseQuery):
    def get_by_name(self, name):
        return self.filter(UserRegistrationData.name == name).all()


class UserRegistrationData(TimestampMixin, db.Model):
    __tablename__ = "userregistrationdata"
    query_class = UserRegistrationDataQuery

    class ChampionsFormTime:
        NINE_AM = "9"
        TEN_AM = "10"
        ELEVEN_AM = "11"
        TWELVE_PM = "12"
        ONE_PM = "1"
        TWO_PM = "2"
        THREE_PM = "3"
        FOUR_PM = "4"
        FIVE_PM = "5"
        SIX_PM = "6"
        SEVEN_PM = "7"
        EIGHT_PM = "8"

        FORM_TIMESLOT_MAP = {
            NINE_AM: Timecategory.Category.NINE_AM,
            TEN_AM: Timecategory.Category.TEN_AM,
            ELEVEN_AM: Timecategory.Category.ELEVEN_AM,
            TWELVE_PM: Timecategory.Category.TWELVE_PM,
            ONE_PM: Timecategory.Category.ONE_PM,
            TWO_PM: Timecategory.Category.TWO_PM,
            THREE_PM: Timecategory.Category.THREE_PM,
            FOUR_PM: Timecategory.Category.FOUR_PM,
            FIVE_PM: Timecategory.Category.FIVE_PM,
            SIX_PM: Timecategory.Category.SIX_PM,
            SEVEN_PM: Timecategory.Category.SEVEN_PM,
            EIGHT_PM: Timecategory.Category.EIGHT_PM,
        }

    class PhoneOwner:
        MOTHER = "Mata"
        FATHER = "Pita"

    class GirldChild:
        YES = "Haan"
        NO = "Nahi"

    class SmartPhone:
        YES = "Haan"
        NO = "Nahi"

    class ChildBetween3and6:
        YES = "Haan"
        NO = "Nahi"

    class DroppedMissedcall:
        YES = "Haan"
        NO = "Nahi"

    class ReceivedCallback:
        YES = "Haan"
        NO = "Nahi"

    class WhatsappProgram:
        YES = "Haan"
        NO = "Nahi"

    class MissedcallReason:
        NO_PHONE = "NO_PHONE"
        NO_BALANCE = "NO_BAL"
        DOST_NOT_REACHABLE = "DOST_NOT_REACH"

        MissedcallReasonMap = {1: NO_PHONE, 2: NO_BALANCE, 3: DOST_NOT_REACHABLE}

    class UserSource:
        FAMILY = "यह मेरा परिवार का सदस्य या मित्र है"
        NEIGHBOUR = "पड़ोस से"
        REFERRAL = "दोस्त के रेफ़र्रेल कॅंपेन"
        DIGITAL_CAMPAIGN = "दोस्त के फेसबुक कैंपेन"

        UserSourceValue = {
            FAMILY: "FAMILY",
            NEIGHBOUR: "NEIGHBOUR",
            REFERRAL: "REFERRAL",
            DIGITAL_CAMPAIGN: "DIGITAL",
        }

        ChampionSources = [FAMILY, NEIGHBOUR]

        UserSourcePartnerMap = {
            REFERRAL: "referral",
            DIGITAL_CAMPAIGN: "digital_campaign",
        }

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    has_girl_child = db.Column(db.Boolean)
    phone = db.Column(db.String(50))
    submitters_latitude = db.Column(db.Float)
    submitters_longitude = db.Column(db.Float)
    is_mothers_number = db.Column(db.Boolean)
    has_smartphone = db.Column(db.Boolean)
    time_slot = db.Column(db.String(20))
    email = db.Column(db.String(100))
    signup_time = db.Column(db.DateTime)
    house_number = db.Column(db.String(200))
    is_duplicate = db.Column(db.Boolean)
    address_line_1 = db.Column(db.String(200))
    address_line_2 = db.Column(db.String(200))
    city_name = db.Column(db.String(100))
    state_name = db.Column(db.String(100))
    country_name = db.Column(db.String(100))
    postal_code = db.Column(db.String(10))
    child_dob = db.Column(db.Date)
    program_name = db.Column(db.String(20))
    is_child_3_6 = db.Column(db.Boolean)
    has_dropped_missedcall = db.Column(db.Boolean)
    has_received_callback = db.Column(db.Boolean)
    missedcall_reason = db.Column(db.String(100))
    whatsapp_program = db.Column(db.Boolean)
    wa_phone = db.Column(db.String(50))
    user_source = db.Column(db.String(50))

    def __repr__(self):
        return "UserRegistrationData " + self.name
