from flask_wtf import FlaskForm
from wtforms import SubmitField, StringField, DateField, PasswordField, SelectField
from wtforms.fields.html5 import EmailField
from wtforms.validators import InputRequired, Optional, Length
from wtforms_validators import AlphaNumeric
from flask_uploads import UploadSet, IMAGES
from flask_wtf.file import FileField, FileAllowed, FileRequired

class SigninForm(FlaskForm):
    eMail = EmailField("Email: ", validators=[InputRequired(message="You must enter an Email"), Length(min=6, max=100, message="Email length must be between 6 and 100 characters")])
    pWord = PasswordField("Password: ", validators=[InputRequired(message="You Must enter a Password"), Length(min=5, max=100, message="Password length must be between 6 and 100 characters")])
    
    submit = SubmitField("Enter")


class SignupForm(FlaskForm):
    eMail = EmailField("Email: ", validators=[InputRequired(message="You must enter an Email"), Length(min=6, max=100, message="Email length must be between 6 and 100 characters")])
    pWord = PasswordField("Password: ", validators=[InputRequired(message="You Must enter a Password"), Length(min=5, max=100, message="Password length must be between 6 and 100 characters"), AlphaNumeric()])
    fName = StringField("First Name: ", validators=[InputRequired(message="You must enter a Name"), Length(min=1, max=100, message="Name length must be between 1 and 100 characters")])
    lName = StringField("Last Name: ", validators=[InputRequired(message="You must enter a Last Name"), Length(min=1, max=100, message="Last Name length must be between 1 and 100 characters")])
    gender = SelectField(u'Gender: ', choices=[('Male', 'Male'), ('Female', 'Female'), ('Other', 'Other')], validators=[InputRequired(message="Choose a Gender")])
    genderOther = StringField("'Other' Gender: ", validators=[Optional(), Length(min=1, max=100, message="Gender length must be between 1 and 100 characters")])
    DOB = DateField("Date of Birth: ", validators=[InputRequired(message="You must enter a Date")], format='%M-%D-%Y')
    address = StringField("Address: ", validators=[InputRequired(message="You must enter an Address"), Length(min=1, max=100, message="Address length must be between 1 and 100 characters")])
    city = StringField("City: ", validators=[InputRequired(message="You must enter a City"), Length(min=1, max=100, message="City length must be between 1 and 100 characters")])
    state = StringField("State: ", validators=[Optional(), Length(min=1, max=100, message="State length must be between 1 and 100 characters")])
    zipCode = StringField("Zipcode: ", validators=[InputRequired(message="You must enter a Zipcode"), Length(min=1, max=50, message="Zipcode length must be between 1 and 50 characters")])
    country = SelectField(u"Country: ", 
        choices=[('Afghanistan', 'Afghanistan'), 
        ('Albania', 'Albania'), 
        ('Algeria', 'Algeria'), 
        ('Andorra', 'Andorra'), 
        ('Angola', 'Angola'), 
        ('Antigua and Barbuda', 'Antigua and Barbuda'), 
        ('Argentina', 'Argentina'), 
        ('Armenia', 'Armenia'), 
        ('Australia', 'Australia'), 
        ('Austria', 'Austria'), 
        ('Austrian Empire', 'Austrian Empire'), 
        ('Azerbaijan', 'Azerbaijan'), 
        ('Baden*', 'Baden*'), 
        ('Bahamas, The', 'Bahamas, The'), 
        ('Bahrain', 'Bahrain'), 
        ('Bangladesh', 'Bangladesh'), 
        ('Barbados', 'Barbados'), 
        ('Bavaria*', 'Bavaria*'), 
        ('Belarus', 'Belarus'), 
        ('Belgium', 'Belgium'), 
        ('Belize', 'Belize'), 
        ('Benin (Dahomey)', 'Benin (Dahomey)'), 
        ('Bolivia', 'Bolivia'), 
        ('Bosnia and Herzegovina', 'Bosnia and Herzegovina'), 
        ('Botswana', 'Botswana'), 
        ('Brazil', 'Brazil'), 
        ('Brunei', 'Brunei'), 
        ('Brunswick and Lüneburg', 'Brunswick and Lüneburg'), 
        ('Bulgaria', 'Bulgaria'), 
        ('Burkina Faso (Upper Volta)', 'Burkina Faso (Upper Volta)'), 
        ('Burma', 'Burma'), 
        ('Burundi', 'Burundi'), 
        ('Cabo Verde', 'Cabo Verde'), 
        ('Cambodia', 'Cambodia'), 
        ('Cameroon', 'Cameroon'), 
        ('Canada', 'Canada'), 
        ('Cayman Islands, The', 'Cayman Islands, The'), 
        ('Central African Republic', 'Central African Republic'), 
        ('Central American Federation*', 'Central American Federation*'), 
        ('Chad', 'Chad'), 
        ('Chile', 'Chile'), 
        ('China', 'China'), 
        ('Colombia', 'Colombia'), 
        ('Comoros', 'Comoros'), 
        ('Congo Free State, The', 'Congo Free State, The'), 
        ('Costa Rica', 'Costa Rica'), 
        ('Cote d’Ivoire (Ivory Coast)', 'Cote d’Ivoire (Ivory Coast)'), 
        ('Croatia', 'Croatia'), 
        ('Cuba', 'Cuba'), 
        ('Cyprus', 'Cyprus'), 
        ('Czechia', 'Czechia'), 
        ('Czechoslovakia', 'Czechoslovakia'), 
        ('Democratic Republic of the Congo', 'Democratic Republic of the Congo'), 
        ('Denmark', 'Denmark'), 
        ('Djibouti', 'Djibouti'), 
        ('Dominica', 'Dominica'), 
        ('Dominican Republic', 'Dominican Republic'), 
        ('Duchy of Parma, The*', 'Duchy of Parma, The*'), 
        ('East Germany (German Democratic Republic)', 'East Germany (German Democratic Republic)'), 
        ('Ecuador', 'Ecuador'), 
        ('Egypt', 'Egypt'), 
        ('El Salvador', 'El Salvador'), 
        ('Equatorial Guinea', 'Equatorial Guinea'), 
        ('Eritrea', 'Eritrea'), 
        ('Estonia', 'Estonia'), 
        ('Eswatini', 'Eswatini'), 
        ('Ethiopia', 'Ethiopia'), 
        ('Federal Government of Germany (1848-49)*', 'Federal Government of Germany (1848-49)*'), 
        ('Fiji', 'Fiji'), 
        ('Finland', 'Finland'), 
        ('France', 'France'), 
        ('Gabon', 'Gabon'), 
        ('Gambia, The', 'Gambia, The'), 
        ('Georgia', 'Georgia'), 
        ('Germany', 'Germany'), 
        ('Ghana', 'Ghana'), 
        ('Grand Duchy of Tuscany, The*', 'Grand Duchy of Tuscany, The*'), 
        ('Greece', 'Greece'), 
        ('Grenada', 'Grenada'), 
        ('Guatemala', 'Guatemala'), 
        ('Guinea', 'Guinea'), 
        ('Guinea-Bissau', 'Guinea-Bissau'), 
        ('Guyana', 'Guyana'), 
        ('Haiti', 'Haiti'), 
        ('Hanover*', 'Hanover*'), 
        ('Hanseatic Republics*', 'Hanseatic Republics*'), 
        ('Hawaii*', 'Hawaii*'), 
        ('Hesse*', 'Hesse*'), 
        ('Holy See', 'Holy See'), 
        ('Honduras', 'Honduras'), 
        ('Hungary', 'Hungary'), 
        ('Iceland', 'Iceland'), 
        ('India', 'India'), 
        ('Indonesia', 'Indonesia'), 
        ('Iran', 'Iran'), 
        ('Iraq', 'Iraq'), 
        ('Ireland', 'Ireland'), 
        ('Israel', 'Israel'), 
        ('Italy', 'Italy'), 
        ('Jamaica', 'Jamaica'), 
        ('Japan', 'Japan'), 
        ('Jordan', 'Jordan'), 
        ('Kazakhstan', 'Kazakhstan'), 
        ('Kenya', 'Kenya'), 
        ('Kingdom of Serbia/Yugoslavia*', 'Kingdom of Serbia/Yugoslavia*'), 
        ('Kiribati', 'Kiribati'), 
        ('Korea', 'Korea'), 
        ('Kosovo', 'Kosovo'), 
        ('Kuwait', 'Kuwait'), 
        ('Kyrgyzstan', 'Kyrgyzstan'), 
        ('Laos', 'Laos'), 
        ('Latvia', 'Latvia'), 
        ('Lebanon', 'Lebanon'), 
        ('Lesotho', 'Lesotho'), 
        ('Lew Chew (Loochoo)*', 'Lew Chew (Loochoo)*'), 
        ('Liberia', 'Liberia'), 
        ('Libya', 'Libya'), 
        ('Liechtenstein', 'Liechtenstein'), 
        ('Lithuania', 'Lithuania'), 
        ('Luxembourg', 'Luxembourg'), 
        ('Madagascar', 'Madagascar'), 
        ('Malawi', 'Malawi'), 
        ('Malaysia', 'Malaysia'), 
        ('Maldives', 'Maldives'), 
        ('Mali', 'Mali'), 
        ('Malta', 'Malta'), 
        ('Marshall Islands', 'Marshall Islands'), 
        ('Mauritania', 'Mauritania'), 
        ('Mauritius', 'Mauritius'), 
        ('Mecklenburg-Schwerin*', 'Mecklenburg-Schwerin*'), 
        ('Mecklenburg-Strelitz*', 'Mecklenburg-Strelitz*'), 
        ('Mexico', 'Mexico'), 
        ('Micronesia', 'Micronesia'), 
        ('Moldova', 'Moldova'), 
        ('Monaco', 'Monaco'), 
        ('Mongolia', 'Mongolia'), 
        ('Montenegro', 'Montenegro'), 
        ('Morocco', 'Morocco'), 
        ('Mozambique', 'Mozambique'), 
        ('Namibia', 'Namibia'), 
        ('Nassau*', 'Nassau*'), 
        ('Nauru', 'Nauru'), 
        ('Nepal', 'Nepal'), 
        ('Netherlands, The', 'Netherlands, The'), 
        ('New Zealand', 'New Zealand'), 
        ('Nicaragua', 'Nicaragua'), 
        ('Niger', 'Niger'), 
        ('Nigeria', 'Nigeria'), 
        ('North German Confederation*', 'North German Confederation*'), 
        ('North German Union*', 'North German Union*'), 
        ('North Macedonia', 'North Macedonia'), 
        ('Norway', 'Norway'), 
        ('Oldenburg*', 'Oldenburg*'), 
        ('Oman', 'Oman'), 
        ('Orange Free State*', 'Orange Free State*'), 
        ('Pakistan', 'Pakistan'), 
        ('Palau', 'Palau'), 
        ('Panama', 'Panama'), 
        ('Papal States*', 'Papal States*'), 
        ('Papua New Guinea', 'Papua New Guinea'), 
        ('Paraguay', 'Paraguay'), 
        ('Peru', 'Peru'), 
        ('Philippines', 'Philippines'), 
        ('Piedmont-Sardinia*', 'Piedmont-Sardinia*'), 
        ('Poland', 'Poland'), 
        ('Portugal', 'Portugal'), 
        ('Qatar', 'Qatar'), 
        ('Republic of Genoa*', 'Republic of Genoa*'), 
        ('Republic of Korea (South Korea)', 'Republic of Korea (South Korea)'), 
        ('Republic of the Congo', 'Republic of the Congo'), 
        ('Romania', 'Romania'), 
        ('Russia', 'Russia'), 
        ('Rwanda', 'Rwanda'), 
        ('Saint Kitts and Nevis', 'Saint Kitts and Nevis'), 
        ('Saint Lucia', 'Saint Lucia'), 
        ('Saint Vincent and the Grenadines', 'Saint Vincent and the Grenadines'), 
        ('Samoa', 'Samoa'), 
        ('San Marino', 'San Marino'), 
        ('Sao Tome and Principe', 'Sao Tome and Principe'), 
        ('Saudi Arabia', 'Saudi Arabia'), 
        ('Schaumburg-Lippe*', 'Schaumburg-Lippe*'), 
        ('Senegal', 'Senegal'), 
        ('Serbia', 'Serbia'), 
        ('Seychelles', 'Seychelles'), 
        ('Sierra Leone', 'Sierra Leone'), 
        ('Singapore', 'Singapore'), 
        ('Slovakia', 'Slovakia'), 
        ('Slovenia', 'Slovenia'), 
        ('Solomon Islands, The', 'Solomon Islands, The'), 
        ('Somalia', 'Somalia'), 
        ('South Africa', 'South Africa'), 
        ('South Sudan', 'South Sudan'), 
        ('Spain', 'Spain'), 
        ('Sri Lanka', 'Sri Lanka'), 
        ('Sudan', 'Sudan'), 
        ('Suriname', 'Suriname'), 
        ('Sweden', 'Sweden'), 
        ('Switzerland', 'Switzerland'), 
        ('Syria', 'Syria'), 
        ('Tajikistan', 'Tajikistan'), 
        ('Tanzania', 'Tanzania'), 
        ('Texas*', 'Texas*'), 
        ('Thailand', 'Thailand'), 
        ('Timor-Leste', 'Timor-Leste'), 
        ('Togo', 'Togo'), 
        ('Tonga', 'Tonga'), 
        ('Trinidad and Tobago', 'Trinidad and Tobago'), 
        ('Tunisia', 'Tunisia'), 
        ('Turkey', 'Turkey'), 
        ('Turkmenistan', 'Turkmenistan'), 
        ('Tuvalu', 'Tuvalu'), 
        ('Two Sicilies*', 'Two Sicilies*'), 
        ('Uganda', 'Uganda'), 
        ('Ukraine', 'Ukraine'), 
        ('Union of Soviet Socialist Republics*', 'Union of Soviet Socialist Republics*'), 
        ('United Arab Emirates, The', 'United Arab Emirates, The'), 
        ('United Kingdom, The', 'United Kingdom, The'),
        ('United States of America', 'United States of America'), 
        ('Uruguay', 'Uruguay'), 
        ('Uzbekistan', 'Uzbekistan'), 
        ('Vanuatu', 'Vanuatu'), 
        ('Venezuela', 'Venezuela'), 
        ('Vietnam', 'Vietnam'), 
        ('Württemberg*', 'Württemberg*'), 
        ('Yemen', 'Yemen'), 
        ('Zambia', 'Zambia'), 
        ('Zimbabwe', 'Zimbabwe')], default=('United States of America', 'United States of America'), validators=[InputRequired(message="Choose a Country")])
    
    submit = SubmitField("Enter")

class PostForm(FlaskForm):
    text = StringField("Content: ", validators=[Optional(), Length(min=1, max=280, message="Post length must be between 1 and 280 characters")])
    img = FileField("Image: ", validators=[Optional(), FileAllowed(['jpg', 'png', 'gif'], "Images/GIF Only")])

    submit = SubmitField("Post")

class bgImgForm(FlaskForm):
    imgbg = FileField("Background Image: ", validators=[Optional(), FileAllowed(['jpg', 'png'], "Images Only")])

    submitBG = SubmitField("Update Background")

class pfImgForm(FlaskForm):
    imgpf = FileField("Profile Image:", validators=[Optional(), FileAllowed(['jpg', 'png', 'gif'], "Images/GIF Only")])

    submitPF = SubmitField("Update Profile")
from flask_wtf import FlaskForm
from wtforms import SubmitField, StringField, DateField, PasswordField, SelectField
from wtforms.fields.html5 import EmailField
from wtforms.validators import InputRequired, Optional, Length
from wtforms_validators import AlphaNumeric
from flask_uploads import UploadSet, IMAGES
from flask_wtf.file import FileField, FileAllowed, FileRequired

class SigninForm(FlaskForm):
    eMail = EmailField("Email: ", validators=[InputRequired(message="You must enter an Email"), Length(min=6, max=100, message="Email length must be between 6 and 100 characters")])
    pWord = PasswordField("Password: ", validators=[InputRequired(message="You Must enter a Password"), Length(min=5, max=100, message="Password length must be between 6 and 100 characters")])
    
    submit = SubmitField("Enter")


class SignupForm(FlaskForm):
    eMail = EmailField("Email: ", validators=[InputRequired(message="You must enter an Email"), Length(min=6, max=100, message="Email length must be between 6 and 100 characters")])
    pWord = PasswordField("Password: ", validators=[InputRequired(message="You Must enter a Password"), Length(min=5, max=100, message="Password length must be between 6 and 100 characters"), AlphaNumeric()])
    fName = StringField("First Name: ", validators=[InputRequired(message="You must enter a Name"), Length(min=1, max=100, message="Name length must be between 1 and 100 characters")])
    lName = StringField("Last Name: ", validators=[InputRequired(message="You must enter a Last Name"), Length(min=1, max=100, message="Last Name length must be between 1 and 100 characters")])
    gender = SelectField(u'Gender: ', choices=[('Male', 'Male'), ('Female', 'Female'), ('Other', 'Other')], validators=[InputRequired(message="Choose a Gender")])
    genderOther = StringField("'Other' Gender: ", validators=[Optional(), Length(min=1, max=100, message="Gender length must be between 1 and 100 characters")])
    DOB = DateField("Date of Birth: ", validators=[InputRequired(message="You must enter a Date")], format='%M-%D-%Y')
    address = StringField("Address: ", validators=[InputRequired(message="You must enter an Address"), Length(min=1, max=100, message="Address length must be between 1 and 100 characters")])
    city = StringField("City: ", validators=[InputRequired(message="You must enter a City"), Length(min=1, max=100, message="City length must be between 1 and 100 characters")])
    state = StringField("State: ", validators=[Optional(), Length(min=1, max=100, message="State length must be between 1 and 100 characters")])
    zipCode = StringField("Zipcode: ", validators=[InputRequired(message="You must enter a Zipcode"), Length(min=1, max=50, message="Zipcode length must be between 1 and 50 characters")])
    country = SelectField(u"Country: ", 
        choices=[('Afghanistan', 'Afghanistan'), 
        ('Albania', 'Albania'), 
        ('Algeria', 'Algeria'), 
        ('Andorra', 'Andorra'), 
        ('Angola', 'Angola'), 
        ('Antigua and Barbuda', 'Antigua and Barbuda'), 
        ('Argentina', 'Argentina'), 
        ('Armenia', 'Armenia'), 
        ('Australia', 'Australia'), 
        ('Austria', 'Austria'), 
        ('Austrian Empire', 'Austrian Empire'), 
        ('Azerbaijan', 'Azerbaijan'), 
        ('Baden*', 'Baden*'), 
        ('Bahamas, The', 'Bahamas, The'), 
        ('Bahrain', 'Bahrain'), 
        ('Bangladesh', 'Bangladesh'), 
        ('Barbados', 'Barbados'), 
        ('Bavaria*', 'Bavaria*'), 
        ('Belarus', 'Belarus'), 
        ('Belgium', 'Belgium'), 
        ('Belize', 'Belize'), 
        ('Benin (Dahomey)', 'Benin (Dahomey)'), 
        ('Bolivia', 'Bolivia'), 
        ('Bosnia and Herzegovina', 'Bosnia and Herzegovina'), 
        ('Botswana', 'Botswana'), 
        ('Brazil', 'Brazil'), 
        ('Brunei', 'Brunei'), 
        ('Brunswick and Lüneburg', 'Brunswick and Lüneburg'), 
        ('Bulgaria', 'Bulgaria'), 
        ('Burkina Faso (Upper Volta)', 'Burkina Faso (Upper Volta)'), 
        ('Burma', 'Burma'), 
        ('Burundi', 'Burundi'), 
        ('Cabo Verde', 'Cabo Verde'), 
        ('Cambodia', 'Cambodia'), 
        ('Cameroon', 'Cameroon'), 
        ('Canada', 'Canada'), 
        ('Cayman Islands, The', 'Cayman Islands, The'), 
        ('Central African Republic', 'Central African Republic'), 
        ('Central American Federation*', 'Central American Federation*'), 
        ('Chad', 'Chad'), 
        ('Chile', 'Chile'), 
        ('China', 'China'), 
        ('Colombia', 'Colombia'), 
        ('Comoros', 'Comoros'), 
        ('Congo Free State, The', 'Congo Free State, The'), 
        ('Costa Rica', 'Costa Rica'), 
        ('Cote d’Ivoire (Ivory Coast)', 'Cote d’Ivoire (Ivory Coast)'), 
        ('Croatia', 'Croatia'), 
        ('Cuba', 'Cuba'), 
        ('Cyprus', 'Cyprus'), 
        ('Czechia', 'Czechia'), 
        ('Czechoslovakia', 'Czechoslovakia'), 
        ('Democratic Republic of the Congo', 'Democratic Republic of the Congo'), 
        ('Denmark', 'Denmark'), 
        ('Djibouti', 'Djibouti'), 
        ('Dominica', 'Dominica'), 
        ('Dominican Republic', 'Dominican Republic'), 
        ('Duchy of Parma, The*', 'Duchy of Parma, The*'), 
        ('East Germany (German Democratic Republic)', 'East Germany (German Democratic Republic)'), 
        ('Ecuador', 'Ecuador'), 
        ('Egypt', 'Egypt'), 
        ('El Salvador', 'El Salvador'), 
        ('Equatorial Guinea', 'Equatorial Guinea'), 
        ('Eritrea', 'Eritrea'), 
        ('Estonia', 'Estonia'), 
        ('Eswatini', 'Eswatini'), 
        ('Ethiopia', 'Ethiopia'), 
        ('Federal Government of Germany (1848-49)*', 'Federal Government of Germany (1848-49)*'), 
        ('Fiji', 'Fiji'), 
        ('Finland', 'Finland'), 
        ('France', 'France'), 
        ('Gabon', 'Gabon'), 
        ('Gambia, The', 'Gambia, The'), 
        ('Georgia', 'Georgia'), 
        ('Germany', 'Germany'), 
        ('Ghana', 'Ghana'), 
        ('Grand Duchy of Tuscany, The*', 'Grand Duchy of Tuscany, The*'), 
        ('Greece', 'Greece'), 
        ('Grenada', 'Grenada'), 
        ('Guatemala', 'Guatemala'), 
        ('Guinea', 'Guinea'), 
        ('Guinea-Bissau', 'Guinea-Bissau'), 
        ('Guyana', 'Guyana'), 
        ('Haiti', 'Haiti'), 
        ('Hanover*', 'Hanover*'), 
        ('Hanseatic Republics*', 'Hanseatic Republics*'), 
        ('Hawaii*', 'Hawaii*'), 
        ('Hesse*', 'Hesse*'), 
        ('Holy See', 'Holy See'), 
        ('Honduras', 'Honduras'), 
        ('Hungary', 'Hungary'), 
        ('Iceland', 'Iceland'), 
        ('India', 'India'), 
        ('Indonesia', 'Indonesia'), 
        ('Iran', 'Iran'), 
        ('Iraq', 'Iraq'), 
        ('Ireland', 'Ireland'), 
        ('Israel', 'Israel'), 
        ('Italy', 'Italy'), 
        ('Jamaica', 'Jamaica'), 
        ('Japan', 'Japan'), 
        ('Jordan', 'Jordan'), 
        ('Kazakhstan', 'Kazakhstan'), 
        ('Kenya', 'Kenya'), 
        ('Kingdom of Serbia/Yugoslavia*', 'Kingdom of Serbia/Yugoslavia*'), 
        ('Kiribati', 'Kiribati'), 
        ('Korea', 'Korea'), 
        ('Kosovo', 'Kosovo'), 
        ('Kuwait', 'Kuwait'), 
        ('Kyrgyzstan', 'Kyrgyzstan'), 
        ('Laos', 'Laos'), 
        ('Latvia', 'Latvia'), 
        ('Lebanon', 'Lebanon'), 
        ('Lesotho', 'Lesotho'), 
        ('Lew Chew (Loochoo)*', 'Lew Chew (Loochoo)*'), 
        ('Liberia', 'Liberia'), 
        ('Libya', 'Libya'), 
        ('Liechtenstein', 'Liechtenstein'), 
        ('Lithuania', 'Lithuania'), 
        ('Luxembourg', 'Luxembourg'), 
        ('Madagascar', 'Madagascar'), 
        ('Malawi', 'Malawi'), 
        ('Malaysia', 'Malaysia'), 
        ('Maldives', 'Maldives'), 
        ('Mali', 'Mali'), 
        ('Malta', 'Malta'), 
        ('Marshall Islands', 'Marshall Islands'), 
        ('Mauritania', 'Mauritania'), 
        ('Mauritius', 'Mauritius'), 
        ('Mecklenburg-Schwerin*', 'Mecklenburg-Schwerin*'), 
        ('Mecklenburg-Strelitz*', 'Mecklenburg-Strelitz*'), 
        ('Mexico', 'Mexico'), 
        ('Micronesia', 'Micronesia'), 
        ('Moldova', 'Moldova'), 
        ('Monaco', 'Monaco'), 
        ('Mongolia', 'Mongolia'), 
        ('Montenegro', 'Montenegro'), 
        ('Morocco', 'Morocco'), 
        ('Mozambique', 'Mozambique'), 
        ('Namibia', 'Namibia'), 
        ('Nassau*', 'Nassau*'), 
        ('Nauru', 'Nauru'), 
        ('Nepal', 'Nepal'), 
        ('Netherlands, The', 'Netherlands, The'), 
        ('New Zealand', 'New Zealand'), 
        ('Nicaragua', 'Nicaragua'), 
        ('Niger', 'Niger'), 
        ('Nigeria', 'Nigeria'), 
        ('North German Confederation*', 'North German Confederation*'), 
        ('North German Union*', 'North German Union*'), 
        ('North Macedonia', 'North Macedonia'), 
        ('Norway', 'Norway'), 
        ('Oldenburg*', 'Oldenburg*'), 
        ('Oman', 'Oman'), 
        ('Orange Free State*', 'Orange Free State*'), 
        ('Pakistan', 'Pakistan'), 
        ('Palau', 'Palau'), 
        ('Panama', 'Panama'), 
        ('Papal States*', 'Papal States*'), 
        ('Papua New Guinea', 'Papua New Guinea'), 
        ('Paraguay', 'Paraguay'), 
        ('Peru', 'Peru'), 
        ('Philippines', 'Philippines'), 
        ('Piedmont-Sardinia*', 'Piedmont-Sardinia*'), 
        ('Poland', 'Poland'), 
        ('Portugal', 'Portugal'), 
        ('Qatar', 'Qatar'), 
        ('Republic of Genoa*', 'Republic of Genoa*'), 
        ('Republic of Korea (South Korea)', 'Republic of Korea (South Korea)'), 
        ('Republic of the Congo', 'Republic of the Congo'), 
        ('Romania', 'Romania'), 
        ('Russia', 'Russia'), 
        ('Rwanda', 'Rwanda'), 
        ('Saint Kitts and Nevis', 'Saint Kitts and Nevis'), 
        ('Saint Lucia', 'Saint Lucia'), 
        ('Saint Vincent and the Grenadines', 'Saint Vincent and the Grenadines'), 
        ('Samoa', 'Samoa'), 
        ('San Marino', 'San Marino'), 
        ('Sao Tome and Principe', 'Sao Tome and Principe'), 
        ('Saudi Arabia', 'Saudi Arabia'), 
        ('Schaumburg-Lippe*', 'Schaumburg-Lippe*'), 
        ('Senegal', 'Senegal'), 
        ('Serbia', 'Serbia'), 
        ('Seychelles', 'Seychelles'), 
        ('Sierra Leone', 'Sierra Leone'), 
        ('Singapore', 'Singapore'), 
        ('Slovakia', 'Slovakia'), 
        ('Slovenia', 'Slovenia'), 
        ('Solomon Islands, The', 'Solomon Islands, The'), 
        ('Somalia', 'Somalia'), 
        ('South Africa', 'South Africa'), 
        ('South Sudan', 'South Sudan'), 
        ('Spain', 'Spain'), 
        ('Sri Lanka', 'Sri Lanka'), 
        ('Sudan', 'Sudan'), 
        ('Suriname', 'Suriname'), 
        ('Sweden', 'Sweden'), 
        ('Switzerland', 'Switzerland'), 
        ('Syria', 'Syria'), 
        ('Tajikistan', 'Tajikistan'), 
        ('Tanzania', 'Tanzania'), 
        ('Texas*', 'Texas*'), 
        ('Thailand', 'Thailand'), 
        ('Timor-Leste', 'Timor-Leste'), 
        ('Togo', 'Togo'), 
        ('Tonga', 'Tonga'), 
        ('Trinidad and Tobago', 'Trinidad and Tobago'), 
        ('Tunisia', 'Tunisia'), 
        ('Turkey', 'Turkey'), 
        ('Turkmenistan', 'Turkmenistan'), 
        ('Tuvalu', 'Tuvalu'), 
        ('Two Sicilies*', 'Two Sicilies*'), 
        ('Uganda', 'Uganda'), 
        ('Ukraine', 'Ukraine'), 
        ('Union of Soviet Socialist Republics*', 'Union of Soviet Socialist Republics*'), 
        ('United Arab Emirates, The', 'United Arab Emirates, The'), 
        ('United Kingdom, The', 'United Kingdom, The'),
        ('United States of America', 'United States of America'), 
        ('Uruguay', 'Uruguay'), 
        ('Uzbekistan', 'Uzbekistan'), 
        ('Vanuatu', 'Vanuatu'), 
        ('Venezuela', 'Venezuela'), 
        ('Vietnam', 'Vietnam'), 
        ('Württemberg*', 'Württemberg*'), 
        ('Yemen', 'Yemen'), 
        ('Zambia', 'Zambia'), 
        ('Zimbabwe', 'Zimbabwe')], default=('United States of America', 'United States of America'), validators=[InputRequired(message="Choose a Country")])
    
    submit = SubmitField("Enter")

class PostForm(FlaskForm):
    text = StringField("Content: ", validators=[Optional(), Length(min=1, max=280, message="Post length must be between 1 and 280 characters")])
    img = FileField("Image: ", validators=[Optional(), FileAllowed(['jpg', 'png', 'gif'], "Images/GIF Only")])

    submit = SubmitField("Post")

class bgImgForm(FlaskForm):
    imgbg = FileField("Background Image: ", validators=[Optional(), FileAllowed(['jpg', 'png'], "Images Only")])

    submitBG = SubmitField("Update Background")

class pfImgForm(FlaskForm):
    imgpf = FileField("Profile Image:", validators=[Optional(), FileAllowed(['jpg', 'png', 'gif'], "Images/GIF Only")])

    submitPF = SubmitField("Update Profile")