import os
import smtplib
from email.message import EmailMessage
from datetime import datetime
from flask import Flask, render_template, request, redirect, url_for, flash
from dotenv import load_dotenv
from flask_mail import Message
from flask_mail import Mail

load_dotenv()

app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET_KEY", "change-me")


app.config.update(
    MAIL_SERVER="smtp.gmail.com",        # ou SMTP pro
    MAIL_PORT=587,
    MAIL_USE_TLS=True,
    MAIL_USERNAME="kazekagegono@gmail.com",
    MAIL_PASSWORD="xzmp cmru ulka afpg",
    MAIL_DEFAULT_SENDER=("Groupe KobaH Ingénierie", "contact@kobah-ingenierie.com")
)

mail = Mail(app)









SECTEURS = {
    "securite-electronique": {
        "title": "Sécurité électronique",
        "subtitle": "Vidéosurveillance, contrôle d’accès, interphonie/visiophonie, alarmes, supervision",
        "bullets": [
            "Audit de site et étude technique",
            "Vidéosurveillance IP, NVR/DVR, supervision",
            "Contrôle d’accès (badge, biométrie), pointeuse",
            "Interphonie / visiophonie et ouverture de porte",
            "Maintenance préventive et corrective",
        ],
    },
    "archivage-electronique": {
        "title": "Archivage électronique",
        "subtitle": "Numérisation, OCR, GED, indexation, traçabilité et accès sécurisé",
        "bullets": [
            "Numérisation et traitement par lots",
            "OCR + indexation (métadonnées)",
            "GED : recherche, droits d’accès, journalisation",
            "Sauvegarde, redondance, continuité d’activité",
            "Formation et accompagnement au changement",
        ],
    },
    "developpement-informatique": {
        "title": "Développement informatique",
        "subtitle": "Applications web & mobile, API, tableaux de bord, automatisation",
        "bullets": [
            "Applications web (Flask) + backoffice",
            "Applications mobile (React Native iOS/Android)",
            "API & intégrations (CRM/ERP), automatisation",
            "Dashboards, exports Excel/PDF, reporting",
            "Maintenance, sécurité et évolutions",
        ],
    },
    "protections-lignes-electriques": {
        "title": "Protections de lignes électriques",
        "subtitle": "Parafoudres, filtrage/EMC, protections, armoires techniques, conformité",
        "bullets": [
            "Étude et diagnostic de protection",
            "Parafoudres (SPD), disjonction, sélectivité",
            "Filtrage / réduction perturbations (EMC)",
            "Conception et intégration d’armoires",
            "Essais, documentation technique, mise en conformité",
        ],
    },
}

SMTP = {
    "host": os.getenv("MAIL_HOST", ""),
    "port": int(os.getenv("MAIL_PORT", "587")),
    "use_tls": os.getenv("MAIL_USE_TLS", "1") == "1",
    "username": os.getenv("MAIL_USERNAME", ""),
    "password": os.getenv("MAIL_PASSWORD", ""),
    "from_name": os.getenv("MAIL_FROM_NAME", "Site Groupe KobaH"),
    "to": os.getenv("MAIL_TO", ""),
    "subject_prefix": os.getenv("MAIL_SUBJECT_PREFIX", "[Site KobaH]"),
}

def send_contact_email(name: str, email: str, phone: str, subject: str, message: str, ip: str, user_agent: str):
    if not (SMTP["host"] and SMTP["username"] and SMTP["password"] and SMTP["to"]):
        raise RuntimeError("SMTP non configuré (vérifie ton .env).")

    msg = EmailMessage()
    msg["Subject"] = f'{SMTP["subject_prefix"]} {subject or "Nouveau message"}'
    msg["From"] = f'{SMTP["from_name"]} <{SMTP["username"]}>'
    msg["To"] = SMTP["to"]
    msg["Reply-To"] = email

    body = f"""Nouveau message depuis le site Groupe KobaH Ingénierie

Nom : {name}
Email : {email}
Téléphone : {phone}
Objet : {subject}

Message :
{message}

--- Infos techniques ---
Date : {datetime.now().isoformat(sep=" ", timespec="seconds")}
IP : {ip}
User-Agent : {user_agent}
"""
    msg.set_content(body)

    with smtplib.SMTP(SMTP["host"], SMTP["port"], timeout=20) as server:
        if SMTP["use_tls"]:
            server.starttls()
        server.login(SMTP["username"], SMTP["password"])
        server.send_message(msg)

@app.route("/")
def index():
    return render_template("index.html", secteurs=SECTEURS)



@app.route("/realisations")
def realisations():
    projets = [
        {"title": "Déploiement contrôle d’accès", "desc": "Installation complète avec supervision.", "tag": "Sécurité"},
        {"title": "Dématérialisation archives", "desc": "OCR + GED + indexation multi-services.", "tag": "Archivage"},
        {"title": "Plateforme web métier", "desc": "Backoffice, rôles, exports, automatisations.", "tag": "Développement"},
        {"title": "Protection électrique site critique", "desc": "SPD + filtrage + mise en conformité.", "tag": "Électrique"},
    ]
    return render_template("realisations.html", projets=projets)

@app.route("/a-propos")
def about():
    return render_template("about.html")



@app.route("/contact", methods=["GET", "POST"])
def contact():
    if request.method == "POST":

        # Honeypot anti-spam
        if request.form.get("website"):
            return redirect(url_for("contact"))

        name = request.form.get("name", "").strip()
        email = request.form.get("email", "").strip()
        phone = request.form.get("phone", "").strip()
        subject = request.form.get("subject", "").strip() or "Demande de contact"
        message = request.form.get("message", "").strip()

        # Validation minimale
        if not name or not email or not message:
            flash("Veuillez remplir tous les champs obligatoires.", "danger")
            return redirect(url_for("contact"))

        # Contenu email
        body = f"""
Nouvelle demande de contact – Groupe KobaH Ingénierie

Nom : {name}
Email : {email}
Téléphone : {phone or "Non renseigné"}
Objet : {subject}

Message :
{message}
        """

        try:
            msg = Message(
                subject=f"[Contact] {subject}",
                recipients=["contact@groupe-kobah.com"],  # destinataire interne
                reply_to=email,
                body=body
            )
            mail.send(msg)

            flash("Votre message a bien été envoyé. Nous vous répondrons rapidement.", "success")
            return redirect(url_for("contact"))

        except Exception as e:
            print(e)
            flash("Une erreur est survenue lors de l’envoi du message.", "danger")
            return redirect(url_for("contact"))

    return render_template("contact.html")




@app.route("/securite-electronique")
def securite_electronique():
    photos = [
        {"src": "img/securite/photo_01.jpg"},
        {"src": "img/securite/photo_02.jpg"},
        {"src": "img/securite/photo_03.webp"},
        {"src": "img/securite/photo_04.webp"},
        {"src": "img/securite/photo_05.webp"},
        #{"src": "img/securite/photo_06.jpg", "alt": "Accès véhicule", "title": "Accès véhicule", "desc": "Portail / barrière et contrôle"},
        #{"src": "img/securite/photo_07.jpg", "alt": "Enregistrement sécurisé", "title": "Enregistrement sécurisé", "desc": "NVR/DVR, stockage et rétention"},
        #{"src": "img/securite/photo_08.jpg", "alt": "Supervision", "title": "Supervision", "desc": "Alertes, événements et relecture"},
    ]

    videos = [
        {"src": "videos/securite/video_01.mp4", "title": "Démonstration supervision", "desc": "Mur d’images, alertes, relecture"},
        {"src": "videos/securite/video_02.mp4", "title": "Contrôle d’accès", "desc": "Badges, droits par zones, logs"},
        {"src": "videos/securite/video_03.mp4", "title": "Visiophonie", "desc": "Accueil visiteurs, ouverture sécurisée"},
        {"src": "videos/securite/video_04.mp4", "title": "Scénario d’alarme", "desc": "Détection, notification, procédure"},
    ]

    return render_template("securite_electronique.html", photos=photos, videos=videos)



from flask import render_template, abort

SOLUTIONS = {
    "videosurveillance": {
        "title": "Vidéosurveillance",
        "subtitle": "Surveillance, enregistrement sécurisé et supervision centralisée.",
        "icon": "img/icons/video-surveillance.svg",
        "bullets": [
            "Étude d’implantation et angles de couverture",
            "Choix caméras IP (intérieur/extérieur) et NVR/DVR",
            "Paramétrage alertes, relecture, exports",
            "Accès distant sécurisé et segmentation réseau (option)",
            "Maintenance préventive et correctif",
        ],
    },
    "controle-acces": {
        "title": "Contrôle d’accès",
        "subtitle": "Gestion des identités, droits par zones et traçabilité des accès.",
        "icon": "img/icons/access-control.svg",
        "bullets": [
            "Badges RFID, clavier, biométrie selon contraintes",
            "Droits par profils, horaires, zones",
            "Journalisation des événements et reporting",
            "Intégration interphonie/visiophonie et pointeuse (option)",
            "Maintenance et support",
        ],
    },
    "interphonie-visiophonie": {
        "title": "Interphonie / Visiophonie",
        "subtitle": "Accueil visiteurs, contrôle d’ouverture et scénarios d’accès.",
        "icon": "img/icons/intercom-visio.svg",
        "bullets": [
            "Portier vidéo IP, postes internes et applications mobiles (selon modèles)",
            "Ouverture sécurisée et règles d’accès",
            "Intégration contrôle d’accès",
            "Journal des appels et historique (option)",
            "Maintenance et support",
        ],
    },
    "alarmes-detection": {
        "title": "Alarmes & Détection",
        "subtitle": "Détection intrusion, alertes et procédures d’exploitation.",
        "icon": "img/icons/alarmes-detection.svg",
        "bullets": [
            "Détection intrusion / périmétrique",
            "Alertes locales et distantes",
            "Scénarios et escalade (option)",
            "Intégration supervision (option)",
            "Maintenance et support",
        ],
    },
}

@app.route("/solutions/<slug>")
def solution(slug):
    data = SOLUTIONS.get(slug)
    if not data:
        abort(404)
    return render_template("solution_detail.html", data=data, slug=slug)


# ===========================
# Flask: rendre la carte cliquable => route /solutions/<slug>
# Ajoute simplement le slug "controle-acces" vers ce template
# ===========================

# Exemple (dans app.py)
from flask import render_template, abort

@app.route("/solutions/controle-acces")
def controle_acces_detail():
    return render_template("solution_controle_acces.html")

# ===========================
# Flask: route vers la page interphonie/visiophonie
# ===========================

@app.route("/solutions/interphonie-visiophonie")
def interphonie_visiophonie_detail():
    return render_template("solution_interphonie_visiophonie.html")


# ===========================
# Flask: route vers la page Alarmes & Détection
# ===========================

@app.route("/solutions/alarmes-detection")
def alarmes_detection_detail():
    return render_template("solution_alarmes_detection.html")


# ===========================
# Flask: route vers la page Archivage électronique
# ===========================

@app.route("/secteurs/archivage-electronique")
def archivage_electronique():
    return render_template("archivage_electronique.html")


@app.route("/secteurs/<slug>")
def secteur(slug):

    if slug == "securite-electronique":
        return render_template("securite_electronique.html")
    if slug == "archivage-electronique":
        return render_template("archivage_electronique.html")

    if slug == "developpement-informatique":
        return render_template("developpement_informatique.html")

    if slug == "protections-lignes-electriques":
        return render_template("protections_lignes_electriques.html")

    # sinon, page générique
    data = SECTEURS.get(slug)
    if not data:
        return render_template("secteur.html", not_found=True), 404
    return render_template("secteur.html", data=data, not_found=False)


#@app.route("/secteurs/<slug>")
#def secteur(slug):
#    data = SECTEURS.get(slug)
#    if not data:
#        return render_template("secteur.html", not_found=True), 404
#    return render_template("secteur.html", slug=slug, data=data)


if __name__ == "__main__":
    app.run(debug=True)
