// screens-legal.jsx — Pages légales TRUSTA (Privacy, Terms, About, Contact, Delete Account)
// Bilingue FR ↔ KA — Pages obligatoires pour soumission App Store / Google Play

// ============================================================
// Helpers UI
// ============================================================

function LegalContainer({ onBack, title, children }) {
  return (
    <div style={{ width: '100%', height: '100%', background: COLORS.bg, display: 'flex', flexDirection: 'column' }}>
      <Header onBack={onBack} title={title} />
      <div style={{ flex: 1, overflowY: 'auto', padding: '8px 24px 80px' }}>
        {children}
      </div>
    </div>
  );
}

function LegalSection({ title, children }) {
  return (
    <div style={{ marginBottom: 24 }}>
      <div style={{
        fontFamily: '"Playfair Display", serif',
        fontSize: 18, fontWeight: 600, color: COLORS.gold,
        marginBottom: 10,
      }}>{title}</div>
      <div style={{
        fontFamily: 'Inter, system-ui', fontSize: 14, lineHeight: 1.6,
        color: COLORS.text2,
      }}>{children}</div>
    </div>
  );
}

function LegalDate({ lang }) {
  return (
    <div style={{
      fontFamily: 'Inter', fontSize: 12, color: COLORS.text3,
      marginBottom: 24, fontStyle: 'italic',
    }}>
      {lang === 'ka' ? 'ბოლო განახლება: 8 მაისი 2026' : 'Dernière mise à jour : 8 mai 2026'}
    </div>
  );
}

// ============================================================
// 1. POLITIQUE DE CONFIDENTIALITÉ
// ============================================================

function PrivacyPolicyScreen({ onBack, lang }) {
  const ka = lang === 'ka';
  return (
    <LegalContainer onBack={onBack} title={ka ? 'კონფიდენციალურობა' : 'Confidentialité'}>
      <LegalDate lang={lang} />

      <LegalSection title={ka ? '1. ვინ ვართ ჩვენ' : '1. Qui sommes-nous'}>
        {ka ? (
          <>TRUSTA-ს მართავს Mon Site Clé en Main, რომელიც დაფუძნებულია მისამართზე 23 rue du Rave, 69390 Millery, საფრანგეთი.<br/>
          საკონტაქტო: contact@trusta.click</>
        ) : (
          <>TRUSTA est éditée par Mon Site Clé en Main, domiciliée 23 rue du Rave, 69390 Millery, France.<br/>
          Contact : contact@trusta.click</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '2. შეგროვებული მონაცემები' : '2. Données collectées'}>
        {ka ? (
          <>ჩვენ ვაგროვებთ:<br/>
          • თქვენი ტელეფონის ნომერი (ავტორიზაციისთვის)<br/>
          • სახელი, ქალაქი, ენა (პროფილისთვის)<br/>
          • თქვენი განცხადებები (ტექსტი, ფოტოები)<br/>
          • ჩატის შეტყობინებები<br/>
          • მინიმალური ტექნიკური მონაცემები (IP შესვლისას)<br/><br/>
          ჩვენ <strong>არ</strong> ვაგროვებთ:<br/>
          • ელ.ფოსტას (გარდა საკონტაქტო ფორმისა)<br/>
          • საბანკო მონაცემებს<br/>
          • ზუსტ GPS ლოკაციას<br/>
          • კონტაქტებს ან ფოტოებს განცხადებების გარეთ</>
        ) : (
          <>Nous collectons :<br/>
          • Votre numéro de téléphone (pour l'authentification)<br/>
          • Prénom, ville, langue (pour le profil)<br/>
          • Vos annonces (texte, photos)<br/>
          • Vos messages dans l'app<br/>
          • Données techniques minimales (IP au login)<br/><br/>
          Nous <strong>ne collectons PAS</strong> :<br/>
          • Votre email (sauf si vous nous contactez)<br/>
          • Vos données bancaires<br/>
          • Votre position GPS précise<br/>
          • Vos contacts ou photos en dehors des annonces</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '3. გამოყენების მიზანი' : '3. Finalité du traitement'}>
        {ka ? (
          <>• სერვისის მიწოდება (კავშირების დამყარება)<br/>
          • წვდომის უსაფრთხოება (SMS ვერიფიკაცია)<br/>
          • ანტი-სპამი (rate limit, რეპორტები)<br/>
          • აპის გაუმჯობესება (ანონიმური სტატისტიკა)<br/><br/>
          სამართლებრივი საფუძველი: მომსახურების ხელშეკრულების შესრულება + ლეგიტიმური ინტერესი.</>
        ) : (
          <>• Fournir le service (mise en relation)<br/>
          • Sécuriser l'accès (OTP par SMS)<br/>
          • Lutter contre l'abus (rate limit, signalements)<br/>
          • Améliorer l'app (statistiques anonymes)<br/><br/>
          Base légale : exécution du contrat de service + intérêt légitime.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '4. მონაცემთა მიმღებები' : '4. Destinataires des données'}>
        {ka ? (
          <>თქვენი მონაცემები რჩება ჩვენთან. ჩვენ ვიყენებთ:<br/>
          • <strong>Twilio</strong> (აშშ) — SMS კოდების გასაგზავნად (მხოლოდ ნომერი, რამდენიმე წამის განმავლობაში)<br/>
          • <strong>Hostinger</strong> (ლიტვა, ევროკავშირი) — ჰოსტინგისთვის<br/>
          • <strong>Anthropic Claude</strong> (აშშ) — განცხადებების ავტო-თარგმანისთვის (მხოლოდ განცხადების ტექსტი)<br/><br/>
          არც ერთ სხვა მხარეს არ აქვს წვდომა. ჩვენ არაფერს ვყიდით.</>
        ) : (
          <>Vos données restent chez nous. Nous utilisons :<br/>
          • <strong>Twilio</strong> (USA) pour l'envoi des SMS de connexion (numéro uniquement, quelques secondes)<br/>
          • <strong>Hostinger</strong> (Lituanie, UE) pour l'hébergement<br/>
          • <strong>Anthropic Claude</strong> (USA) pour la traduction automatique des annonces (texte des annonces uniquement)<br/><br/>
          Aucune autre tierce partie. Nous ne vendons rien à personne.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '5. შენახვის ვადა' : '5. Durée de conservation'}>
        {ka ? (
          <>• აქტიური ანგარიში: სანამ იყენებთ<br/>
          • წაშლილი ანგარიში: 30 დღე, შემდეგ საბოლოო წაშლა<br/>
          • განცხადებები: სანამ აქტიურია + 1 წელი არქივში<br/>
          • შეტყობინებები: ანგარიშის აქტიურობის განმავლობაში</>
        ) : (
          <>• Compte actif : tant que vous l'utilisez<br/>
          • Compte supprimé : 30 jours puis suppression définitive<br/>
          • Annonces : actives + 1 an d'archive<br/>
          • Messages : tant que le compte est actif</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '6. თქვენი უფლებები (GDPR)' : '6. Vos droits (RGPD)'}>
        {ka ? (
          <>თქვენ გაქვთ უფლება:<br/>
          • წვდომა მონაცემებზე<br/>
          • შესწორება<br/>
          • წაშლა (ღილაკი აპში: პროფილი → ანგარიშის წაშლა)<br/>
          • ექსპორტი<br/>
          • წინააღმდეგობა<br/><br/>
          ამ უფლებების გამოყენებისთვის: contact@trusta.click ან აპის შიგნით.<br/><br/>
          ასევე შეგიძლიათ მიმართოთ CNIL-ს (cnil.fr).</>
        ) : (
          <>Vous avez le droit de :<br/>
          • Accéder à vos données<br/>
          • Les corriger<br/>
          • Les supprimer (bouton dans l'app : Profil → Supprimer mon compte)<br/>
          • Les exporter<br/>
          • Vous opposer au traitement<br/><br/>
          Pour exercer ces droits : contact@trusta.click ou directement dans l'app.<br/><br/>
          Vous pouvez aussi déposer une réclamation auprès de la CNIL (cnil.fr).</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '7. უსაფრთხოება' : '7. Sécurité'}>
        {ka ? (
          <>• პაროლები არ ინახება (ავტორიზაცია OTP-ით)<br/>
          • დაშიფრული კავშირები (HTTPS)<br/>
          • OTP კოდები hash-შია (SHA-256)<br/>
          • ადმინ წვდომა დაცულია</>
        ) : (
          <>• Pas de mot de passe stocké (authentification par OTP)<br/>
          • Connexions chiffrées (HTTPS)<br/>
          • Codes OTP hashés (SHA-256)<br/>
          • Accès admin protégé</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '8. Cookies და ლოკალური მონაცემები' : '8. Cookies et stockage local'}>
        {ka ? (
          <>TRUSTA იყენებს:<br/>
          • სესიის ტოკენი ლოკალურად მოწყობილობაზე (შესვლის შესანარჩუნებლად)<br/>
          • არჩეული ენა (FR ან KA)<br/><br/>
          არანაირი მესამე მხარის თვალთვალის cookie. არანაირი სარეკლამო პიქსელი.</>
        ) : (
          <>TRUSTA utilise :<br/>
          • Un token de session stocké localement (pour rester connecté)<br/>
          • Votre langue choisie (FR ou KA)<br/><br/>
          Aucun cookie de suivi tiers. Aucun pixel publicitaire.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '9. არასრულწლოვნები' : '9. Mineurs'}>
        {ka ? (
          <>TRUSTA განკუთვნილია 18 წლისა და უფროსი ასაკის პირებისთვის. თუ აღმოაჩენთ არასრულწლოვნის ანგარიშს, შეგვატყობინეთ.</>
        ) : (
          <>TRUSTA est réservé aux personnes de 18 ans ou plus. Si vous identifiez un compte de mineur, signalez-le-nous.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '10. გადაცემები ევროკავშირის გარეთ' : '10. Transferts hors UE'}>
        {ka ? (
          <>Twilio და Anthropic მდებარეობს აშშ-ში. გადაცემები რეგულირდება სტანდარტული სახელშეკრულებო პუნქტებით (SCC) ან Data Privacy Framework-ით.</>
        ) : (
          <>Twilio et Anthropic sont situés aux États-Unis. Les transferts sont encadrés par les Clauses Contractuelles Types (CCT) et le Data Privacy Framework.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '11. ცვლილებები' : '11. Modifications'}>
        {ka ? (
          <>ეს პოლიტიკა შეიძლება განახლდეს. ჩვენ შეგატყობინებთ აპის შიგნით და ზემოთ თარიღს განვაახლებთ.</>
        ) : (
          <>Cette politique peut être mise à jour. Nous vous prévenons par notification dans l'app et par mise à jour de la date en haut.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '12. კონტაქტი' : '12. Contact'}>
        {ka ? (
          <>ნებისმიერი კითხვისთვის: <strong>contact@trusta.click</strong></>
        ) : (
          <>Pour toute question : <strong>contact@trusta.click</strong></>
        )}
      </LegalSection>
    </LegalContainer>
  );
}
window.PrivacyPolicyScreen = PrivacyPolicyScreen;

// ============================================================
// 2. CONDITIONS D'UTILISATION
// ============================================================

function TermsScreen({ onBack, lang }) {
  const ka = lang === 'ka';
  return (
    <LegalContainer onBack={onBack} title={ka ? 'პირობები' : 'Conditions d\'utilisation'}>
      <LegalDate lang={lang} />

      <LegalSection title={ka ? '1. სერვისის აღწერა' : '1. Description du service'}>
        {ka ? (
          <>TRUSTA არის პლატფორმა, რომელიც აერთიანებს ქართულ დიასპორას საფრანგეთში. მომხმარებლები აქვეყნებენ განცხადებებს (სამუშაო შეთავაზებები, მომსახურება, საცხოვრებელი და სხვ.) და უკავშირდებიან ერთმანეთს დაცული ჩატის მეშვეობით.</>
        ) : (
          <>TRUSTA est une plateforme qui met en relation la diaspora géorgienne en France. Les utilisateurs publient des annonces (offres d'emploi, services, logement, etc.) et entrent en contact via un chat sécurisé.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '2. ანგარიშის შექმნა' : '2. Création de compte'}>
        {ka ? (
          <>ანგარიშის შესაქმნელად თქვენ უნდა იყოთ:<br/>
          • 18 წლის ან მეტი<br/>
          • გქონდეთ მოქმედი ფრანგული მობილური ნომერი<br/>
          • წარმოადგინოთ ზუსტი ინფორმაცია (სახელი, ქალაქი)<br/><br/>
          ერთ პირზე ერთი ანგარიში.</>
        ) : (
          <>Pour créer un compte vous devez :<br/>
          • Être majeur (18 ans et plus)<br/>
          • Avoir un numéro mobile français valide<br/>
          • Fournir des informations exactes (prénom, ville)<br/><br/>
          Un seul compte par personne.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '3. დაშვებული გამოყენება' : '3. Utilisation autorisée'}>
        {ka ? (
          <>თქვენ შეგიძლიათ TRUSTA-ს გამოყენება:<br/>
          • ლეგალური მომსახურების შესათავაზებლად ან საძიებლად<br/>
          • საცხოვრებლის ან საქონლის გაცვლისთვის<br/>
          • კონტაქტისთვის სხვა მომხმარებლებთან კონსტრუქციული მიზნით</>
        ) : (
          <>Vous pouvez utiliser TRUSTA pour :<br/>
          • Proposer ou rechercher des services légaux<br/>
          • Échanger des logements ou objets<br/>
          • Entrer en contact avec d'autres utilisateurs dans un but constructif</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '4. აკრძალული ქცევა' : '4. Conduite interdite'}>
        {ka ? (
          <>აკრძალულია:<br/>
          • სპამი ან მასობრივი რეკლამა<br/>
          • ცრუ ან შეცდომაში შემყვანი განცხადებები<br/>
          • არალეგალური მომსახურება (ნარკოტიკები, იარაღი, ბავშვების ექსპლუატაცია)<br/>
          • შეურაცხყოფა, ჩაგვრა, მუქარა<br/>
          • რასისტული, სექსისტური ან დისკრიმინაციული შინაარსი<br/>
          • პორნოგრაფიული ან ექსპლიციტური შინაარსი<br/>
          • საავტორო უფლებების დარღვევა<br/>
          • ცრუ ანგარიშების შექმნა<br/>
          • პლატფორმის უსაფრთხოების შემოვლა<br/><br/>
          ამ წესების დარღვევა იწვევს ანგარიშის დაუყოვნებლივ დახურვას შეტყობინების გარეშე.</>
        ) : (
          <>Sont interdits :<br/>
          • Le spam ou la publicité de masse<br/>
          • Les annonces fausses ou trompeuses<br/>
          • Les services illégaux (drogues, armes, exploitation)<br/>
          • Le harcèlement, l'intimidation, les menaces<br/>
          • Le contenu raciste, sexiste ou discriminatoire<br/>
          • Le contenu pornographique ou explicite<br/>
          • La violation des droits d'auteur<br/>
          • La création de faux comptes<br/>
          • Le contournement de la sécurité de la plateforme<br/><br/>
          La violation entraîne la suspension immédiate du compte sans préavis.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '5. შინაარსის უფლებები' : '5. Droits sur le contenu'}>
        {ka ? (
          <>თქვენ რჩებით თქვენი შინაარსის მფლობელი (განცხადებები, ფოტოები, შეტყობინებები). TRUSTA-ს გადასცემთ მათი ჩვენების უფლებას აპში.<br/><br/>
          TRUSTA-ს უფლება აქვს წაშალოს ნებისმიერი შინაარსი წინასწარი შეტყობინების გარეშე, თუ ის არღვევს წესებს ან კანონს.</>
        ) : (
          <>Vous restez propriétaire de votre contenu (annonces, photos, messages). Vous accordez à TRUSTA le droit de l'afficher dans l'app.<br/><br/>
          TRUSTA se réserve le droit de supprimer tout contenu sans préavis s'il viole ces règles ou la loi.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '6. ანგარიშის შეწყვეტა' : '6. Résiliation du compte'}>
        {ka ? (
          <>თქვენ შეგიძლიათ წაშალოთ თქვენი ანგარიში ნებისმიერ დროს (პროფილი → ანგარიშის წაშლა).<br/><br/>
          ჩვენ შეგვიძლია შევაჩეროთ ან წავშალოთ თქვენი ანგარიში თუ ის არღვევს ამ პირობებს.</>
        ) : (
          <>Vous pouvez supprimer votre compte à tout moment (Profil → Supprimer mon compte).<br/><br/>
          Nous pouvons suspendre ou supprimer votre compte s'il enfreint ces conditions.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '7. პასუხისმგებლობის შეზღუდვა' : '7. Limitation de responsabilité'}>
        {ka ? (
          <>TRUSTA არის შუამავალი პლატფორმა. ჩვენ არ ვართ პასუხისმგებელი:<br/>
          • მომხმარებლების ქცევაზე<br/>
          • განცხადებების სიზუსტეზე<br/>
          • მომხმარებლებს შორის შეთანხმებებზე<br/>
          • პლატფორმის გარეთ შესრულებულ ტრანზაქციებზე<br/><br/>
          ნებისმიერი დავა მომხმარებლებს შორის უნდა გადაიჭრას მათ შორის.</>
        ) : (
          <>TRUSTA est une plateforme intermédiaire. Nous ne sommes pas responsables :<br/>
          • Du comportement des utilisateurs<br/>
          • De l'exactitude des annonces<br/>
          • Des accords conclus entre utilisateurs<br/>
          • Des transactions réalisées hors plateforme<br/><br/>
          Tout différend entre utilisateurs doit être réglé entre eux.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '8. გამოყენებული კანონი' : '8. Droit applicable'}>
        {ka ? (
          <>ეს პირობები რეგულირდება ფრანგული კანონით. ნებისმიერი დავა ექვემდებარება საფრანგეთის სასამართლოებს.</>
        ) : (
          <>Les présentes conditions sont régies par le droit français. Tout litige relève des tribunaux français.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '9. ცვლილებები' : '9. Modifications'}>
        {ka ? (
          <>ეს პირობები შეიძლება განახლდეს. შესწორებები აპში გამოცხადდება.</>
        ) : (
          <>Ces conditions peuvent être mises à jour. Les modifications seront annoncées dans l'app.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? '10. კონტაქტი' : '10. Contact'}>
        {ka ? <>contact@trusta.click</> : <>contact@trusta.click</>}
      </LegalSection>
    </LegalContainer>
  );
}
window.TermsScreen = TermsScreen;

// ============================================================
// 3. À PROPOS
// ============================================================

function AboutScreen({ onBack, lang }) {
  const ka = lang === 'ka';
  return (
    <LegalContainer onBack={onBack} title={ka ? 'ჩვენს შესახებ' : 'À propos'}>
      <div style={{ textAlign: 'center', padding: '32px 0' }}>
        {window.TrustaLogo ? <TrustaLogo size={72} /> : null}
        <div style={{
          fontFamily: '"Playfair Display", serif', fontSize: 32, fontWeight: 700,
          color: COLORS.gold, letterSpacing: '0.16em', marginTop: 12,
        }}>TRUSTA</div>
        <div style={{
          fontFamily: 'Inter', fontSize: 11, fontWeight: 500, letterSpacing: '0.28em',
          color: 'rgba(255,255,255,0.55)', textTransform: 'uppercase', marginTop: 6,
        }}>Where Trust Meets Opportunity</div>
      </div>

      <LegalSection title={ka ? 'ჩვენი მისია' : 'Notre mission'}>
        {ka ? (
          <>TRUSTA არის ქართული დიასპორის პლატფორმა საფრანგეთში. ჩვენ ვაერთიანებთ ქართველებს, რომლებიც ცხოვრობენ, მუშაობენ ან ახლახან ჩამოვიდნენ საფრანგეთში, რათა მათ შეძლონ ერთმანეთს დაეხმარონ — სამუშაოს, საცხოვრებლის, ინფორმაციის და ნდობის გარემოს მეშვეობით.</>
        ) : (
          <>TRUSTA est une plateforme dédiée à la diaspora géorgienne en France. Nous mettons en relation les Géorgiens qui vivent, travaillent ou viennent d'arriver en France, pour qu'ils puissent s'entraider — par le travail, le logement, l'information et un environnement de confiance.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? 'რას ვაკეთებთ' : 'Ce que nous faisons'}>
        {ka ? (
          <>• კავშირი მუშაკებსა და დამქირავებლებს შორის<br/>
          • საცხოვრებლის გაცვლა და მოძიება<br/>
          • კარგი მისამართების და კონტაქტების გაზიარება<br/>
          • პროფესიული მომსახურების შეთავაზებები<br/>
          • ქართულენოვანი დაცული ჩატი</>
        ) : (
          <>• Mise en relation entre travailleurs et employeurs<br/>
          • Échange et recherche de logement<br/>
          • Partage de bonnes adresses et de contacts<br/>
          • Offres de services professionnels<br/>
          • Chat sécurisé en géorgien et français</>
        )}
      </LegalSection>

      <LegalSection title={ka ? 'ჩვენი ღირებულებები' : 'Nos valeurs'}>
        {ka ? (
          <>• <strong>ნდობა</strong> — დაცული ვერიფიკაცია<br/>
          • <strong>გამჭვირვალობა</strong> — ფარული ხარჯების გარეშე<br/>
          • <strong>ერთობა</strong> — ქართველებისთვის, ქართველების მიერ<br/>
          • <strong>კონფიდენციალურობა</strong> — თქვენი მონაცემები არ იყიდება</>
        ) : (
          <>• <strong>Confiance</strong> — vérification sécurisée<br/>
          • <strong>Transparence</strong> — aucun frais caché<br/>
          • <strong>Communauté</strong> — par et pour les Géorgiens<br/>
          • <strong>Confidentialité</strong> — vos données ne sont jamais vendues</>
        )}
      </LegalSection>

      <LegalSection title={ka ? 'პროექტი' : 'Le projet'}>
        {ka ? (
          <>TRUSTA შეიქმნა ირინა გერვაზონის ხედვით (ქართველი, რომელიც საფრანგეთში ცხოვრობს) და Mon Site Clé en Main-ის ტექნიკური მხარდაჭერით.<br/><br/>
          ჩვენ ვართ პატარა ჯგუფი. ჩვენ ვაშენებთ თქვენ ერთად. თქვენი feedback არის ყველაზე ღირებული რესურსი ჩვენთვის.</>
        ) : (
          <>TRUSTA est portée par la vision d'Irina Gervason (Géorgienne installée en France) avec le développement technique de Mon Site Clé en Main.<br/><br/>
          Nous sommes une petite équipe. Nous construisons avec vous. Vos retours sont notre ressource la plus précieuse.</>
        )}
      </LegalSection>

      <LegalSection title={ka ? 'საკონტაქტო' : 'Contact'}>
        {ka ? (
          <>📧 contact@trusta.click<br/>
          🌐 trusta.click</>
        ) : (
          <>📧 contact@trusta.click<br/>
          🌐 trusta.click</>
        )}
      </LegalSection>
    </LegalContainer>
  );
}
window.AboutScreen = AboutScreen;

// ============================================================
// 4. CONTACT
// ============================================================

function ContactScreen({ onBack, lang, user }) {
  const ka = lang === 'ka';
  const [subject, setSubject] = React.useState('general');
  const [message, setMessage] = React.useState('');
  const [sent, setSent] = React.useState(false);
  const [loading, setLoading] = React.useState(false);

  const subjects = ka
    ? [
        { value: 'general', label: 'ზოგადი კითხვა' },
        { value: 'bug', label: 'ბაგის შეტყობინება' },
        { value: 'report', label: 'შინაარსის გადახედვა' },
        { value: 'account', label: 'ანგარიშის პრობლემა' },
        { value: 'other', label: 'სხვა' },
      ]
    : [
        { value: 'general', label: 'Question générale' },
        { value: 'bug', label: 'Signaler un bug' },
        { value: 'report', label: 'Signaler du contenu' },
        { value: 'account', label: 'Problème de compte' },
        { value: 'other', label: 'Autre' },
      ];

  const send = async () => {
    if (loading || !message.trim()) return;
    setLoading(true);
    // Pour l'instant : ouvre le mailto avec le contenu pré-rempli
    // V2 : endpoint API qui envoie l'email côté serveur
    const subj = subjects.find(s => s.value === subject)?.label || subject;
    const body = encodeURIComponent(
      `[${subj}]\n\n${message}\n\n---\nUtilisateur: ${user?.name || 'Anonyme'} (#${user?.id || '?'})\nLangue: ${lang}`
    );
    window.location.href = `mailto:contact@trusta.click?subject=${encodeURIComponent('[TRUSTA] ' + subj)}&body=${body}`;
    setSent(true);
    setLoading(false);
  };

  if (sent) {
    return (
      <LegalContainer onBack={onBack} title={ka ? 'კონტაქტი' : 'Contact'}>
        <div style={{
          textAlign: 'center', padding: '60px 24px',
          fontFamily: 'Inter', color: COLORS.text2,
        }}>
          <div style={{ fontSize: 48, marginBottom: 16 }}>✉️</div>
          <div style={{
            fontFamily: '"Playfair Display", serif', fontSize: 22,
            color: COLORS.gold, marginBottom: 12,
          }}>
            {ka ? 'შეტყობინება გაიგზავნა' : 'Message envoyé'}
          </div>
          <div style={{ fontSize: 14, lineHeight: 1.5, color: COLORS.text2 }}>
            {ka
              ? 'მადლობა! ჩვენ უპასუხებთ 48 საათში.'
              : 'Merci ! Nous répondons sous 48h.'}
          </div>
        </div>
      </LegalContainer>
    );
  }

  return (
    <LegalContainer onBack={onBack} title={ka ? 'კონტაქტი' : 'Contact'}>
      <div style={{
        fontFamily: 'Inter', fontSize: 14, color: COLORS.text2,
        lineHeight: 1.5, marginBottom: 24,
      }}>
        {ka
          ? 'გვაქვს კითხვა, პრობლემა ან იდეა? დაგვიკავშირდით — ვუპასუხებთ 48 საათში.'
          : 'Une question, un problème, une idée ? Écris-nous — nous répondons sous 48h.'}
      </div>

      <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
        <div>
          <div style={{
            fontFamily: 'Inter', fontSize: 12, color: COLORS.text2,
            fontWeight: 500, marginBottom: 8,
          }}>
            {ka ? 'საგანი' : 'Sujet'}
          </div>
          <select
            value={subject}
            onChange={e => setSubject(e.target.value)}
            style={{
              width: '100%', padding: '12px 14px', borderRadius: 12,
              background: COLORS.card, border: `1px solid ${COLORS.borderSoft}`,
              color: '#fff', fontFamily: 'Inter', fontSize: 14, outline: 'none',
            }}
          >
            {subjects.map(s => <option key={s.value} value={s.value}>{s.label}</option>)}
          </select>
        </div>

        <div>
          <div style={{
            fontFamily: 'Inter', fontSize: 12, color: COLORS.text2,
            fontWeight: 500, marginBottom: 8,
          }}>
            {ka ? 'შეტყობინება' : 'Message'}
          </div>
          <textarea
            value={message}
            onChange={e => setMessage(e.target.value)}
            placeholder={ka ? 'მიწერეთ აქ...' : 'Écris ton message ici...'}
            rows={6}
            style={{
              width: '100%', padding: '12px 14px', borderRadius: 12,
              background: COLORS.card, border: `1px solid ${COLORS.borderSoft}`,
              color: '#fff', fontFamily: 'Inter', fontSize: 14, outline: 'none',
              resize: 'vertical', minHeight: 120,
            }}
          />
        </div>

        <button
          onClick={send}
          disabled={loading || !message.trim()}
          style={{
            width: '100%', height: 52, borderRadius: 14,
            background: message.trim() && !loading ? COLORS.gold : COLORS.borderSoft,
            color: message.trim() && !loading ? '#000' : COLORS.text3,
            fontFamily: 'Inter', fontSize: 16, fontWeight: 700,
            border: 'none', cursor: message.trim() && !loading ? 'pointer' : 'not-allowed',
            transition: 'all 0.2s',
          }}
        >
          {loading ? '...' : (ka ? 'გაგზავნა' : 'Envoyer')}
        </button>

        <div style={{
          fontFamily: 'Inter', fontSize: 12, color: COLORS.text3,
          textAlign: 'center', marginTop: 8, lineHeight: 1.4,
        }}>
          {ka
            ? 'ან პირდაპირ: contact@trusta.click'
            : 'Ou directement : contact@trusta.click'}
        </div>
      </div>
    </LegalContainer>
  );
}
window.ContactScreen = ContactScreen;

// ============================================================
// 5. SUPPRESSION DE COMPTE (3 étapes — Apple obligatoire)
// ============================================================

function DeleteAccountScreen({ onBack, onDeleted, lang }) {
  const ka = lang === 'ka';
  // 1 = warning + confirm, 2 = OTP sent + saisir code, 3 = done
  const [step, setStep] = React.useState(1);
  const [confirmText, setConfirmText] = React.useState('');
  const [code, setCode] = React.useState(['', '', '', '', '', '']);
  const [loading, setLoading] = React.useState(false);
  const [error, setError] = React.useState(null);
  const refs = React.useRef([]);

  const DELETE_KEYWORD = ka ? 'წაშლა' : 'SUPPRIMER';

  // Demande l'OTP (passe à l'étape 2)
  const requestOtp = async () => {
    if (loading) return;
    setError(null);

    if (confirmText.trim().toUpperCase() !== DELETE_KEYWORD.toUpperCase()) {
      setError(ka
        ? `გთხოვთ ჩაწეროთ "${DELETE_KEYWORD}" დასადასტურებლად`
        : `Tape exactement "${DELETE_KEYWORD}" pour confirmer`);
      return;
    }

    setLoading(true);
    try {
      const res = await fetch((window.location.pathname.includes('/app/') ? '/app/api' : '/api') + '/me-delete.php', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + window.TrustaAuth.getToken(),
          'X-Lang': lang,
        },
        body: JSON.stringify({}),
      });
      const data = await res.json();
      if (!res.ok) throw data;
      setStep(2);
      setLoading(false);
    } catch (err) {
      setError(err.message || (ka ? 'შეცდომა, სცადეთ თავიდან' : 'Erreur, réessaie'));
      setLoading(false);
    }
  };

  // Vérifie OTP + supprime
  const confirmDelete = async (digits) => {
    if (loading) return;
    setError(null);
    setLoading(true);
    try {
      const res = await fetch((window.location.pathname.includes('/app/') ? '/app/api' : '/api') + '/me-delete.php', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + window.TrustaAuth.getToken(),
          'X-Lang': lang,
        },
        body: JSON.stringify({ code: digits }),
      });
      const data = await res.json();
      if (!res.ok) throw data;
      // Logout local + écran de confirmation
      window.TrustaAuth.clearToken();
      setStep(3);
      setLoading(false);
    } catch (err) {
      setError(err.code === 'invalid_code'
        ? (ka ? 'არასწორი ან ვადაგასული კოდი' : 'Code incorrect ou expiré')
        : (err.message || (ka ? 'შეცდომა' : 'Erreur')));
      setCode(['', '', '', '', '', '']);
      refs.current[0] && refs.current[0].focus();
      setLoading(false);
    }
  };

  const setDigit = (i, v) => {
    if (!/^\d?$/.test(v)) return;
    const nc = [...code]; nc[i] = v; setCode(nc);
    if (v && i < 5) refs.current[i + 1] && refs.current[i + 1].focus();
    if (nc.every(d => d) && nc.join('').length === 6) {
      confirmDelete(nc.join(''));
    }
  };

  // ===== Étape 3 : done =====
  if (step === 3) {
    return (
      <LegalContainer onBack={null} title={ka ? 'ანგარიში წაიშალა' : 'Compte supprimé'}>
        <div style={{
          textAlign: 'center', padding: '80px 24px 40px',
          fontFamily: 'Inter', color: COLORS.text2,
        }}>
          <div style={{ fontSize: 56, marginBottom: 20 }}>👋</div>
          <div style={{
            fontFamily: '"Playfair Display", serif', fontSize: 24,
            color: COLORS.gold, marginBottom: 16,
          }}>
            {ka ? 'ნახვამდის' : 'À bientôt peut-être'}
          </div>
          <div style={{ fontSize: 14, lineHeight: 1.6, marginBottom: 32 }}>
            {ka
              ? 'შენი ანგარიში წაიშალა. შენი მონაცემები საბოლოოდ წაიშლება 30 დღეში.\n\nმადლობა რომ TRUSTA-ში იყავი 💛'
              : 'Ton compte a été supprimé. Tes données seront effacées définitivement sous 30 jours.\n\nMerci d\'avoir été avec TRUSTA 💛'}
          </div>
          <button
            onClick={() => {
              try { localStorage.clear(); } catch (e) {}
              window.location.href = '/app/';
            }}
            style={{
              padding: '14px 32px', borderRadius: 100,
              background: COLORS.gold, color: '#000',
              fontFamily: 'Inter', fontSize: 15, fontWeight: 700,
              border: 'none', cursor: 'pointer',
            }}
          >
            {ka ? 'მთავარი გვერდი' : 'Retour à l\'accueil'}
          </button>
        </div>
      </LegalContainer>
    );
  }

  // ===== Étape 2 : OTP =====
  if (step === 2) {
    return (
      <LegalContainer onBack={() => setStep(1)} title={ka ? 'საბოლოო დადასტურება' : 'Confirmation finale'}>
        <div style={{ padding: '20px 0 12px' }}>
          <div style={{
            fontFamily: '"Playfair Display", serif', fontSize: 20, color: COLORS.red,
            textAlign: 'center', marginBottom: 12,
          }}>
            {ka ? '⚠️ ბოლო ნაბიჯი' : '⚠️ Dernière étape'}
          </div>
          <div style={{
            fontFamily: 'Inter', fontSize: 14, lineHeight: 1.5,
            color: COLORS.text2, textAlign: 'center', padding: '0 12px',
          }}>
            {ka
              ? 'SMS-ით კოდი გამოგზავნა. შეიყვანე ქვემოთ რომ საბოლოოდ წაშალო შენი ანგარიში.'
              : 'Un code a été envoyé par SMS. Saisis-le pour supprimer définitivement ton compte.'}
          </div>
        </div>

        <div style={{ display: 'flex', justifyContent: 'center', gap: 8, marginTop: 28 }}>
          {[0, 1, 2, 3, 4, 5].map(i => (
            <input
              key={i}
              ref={el => refs.current[i] = el}
              value={code[i]}
              onChange={e => setDigit(i, e.target.value)}
              maxLength={1}
              inputMode="numeric"
              disabled={loading}
              style={{
                width: 44, height: 56, borderRadius: 12,
                background: COLORS.card,
                border: `1px solid ${error ? COLORS.red : (code[i] ? COLORS.red : COLORS.borderSoft)}`,
                color: COLORS.red,
                fontFamily: '"Playfair Display", serif', fontSize: 24, fontWeight: 600,
                textAlign: 'center', outline: 'none', opacity: loading ? 0.5 : 1,
              }}
              autoFocus={i === 0}
            />
          ))}
        </div>

        {error && (
          <div style={{
            textAlign: 'center', marginTop: 16, padding: '0 24px',
            fontFamily: 'Inter', fontSize: 13, color: COLORS.red,
          }}>{error}</div>
        )}

        <div style={{
          textAlign: 'center', marginTop: 32, padding: '0 24px',
          fontFamily: 'Inter', fontSize: 12, color: COLORS.text3,
        }}>
          {ka
            ? 'როცა შეიყვან კოდს, ანგარიში წაიშლება დაუყოვნებლივ.'
            : 'Dès que tu valides le code, ton compte sera supprimé immédiatement.'}
        </div>
      </LegalContainer>
    );
  }

  // ===== Étape 1 : warning + confirm =====
  return (
    <LegalContainer onBack={onBack} title={ka ? 'ანგარიშის წაშლა' : 'Supprimer mon compte'}>
      <div style={{
        marginTop: 12, padding: 18, borderRadius: 14,
        background: 'rgba(239, 68, 68, 0.06)',
        border: '1px solid rgba(239, 68, 68, 0.30)',
      }}>
        <div style={{
          fontFamily: '"Playfair Display", serif', fontSize: 18,
          color: COLORS.red, marginBottom: 12,
        }}>
          {ka ? '⚠️ ეს მოქმედება საბოლოოა' : '⚠️ Cette action est définitive'}
        </div>
        <div style={{
          fontFamily: 'Inter', fontSize: 13.5, lineHeight: 1.6,
          color: COLORS.text2,
        }}>
          {ka ? (
            <>თუ წაშლი შენს ანგარიშს:<br/>
            • ყველა შენი განცხადება გაქრება<br/>
            • შენი მონაცემები ანონიმური გახდება დაუყოვნებლივ<br/>
            • ფიზიკური წაშლა 30 დღეში<br/>
            • ვერ შეძლებ ანგარიშის აღდგენას<br/>
            • საუბრები სხვა მომხმარებლებთან ხილული დარჩება მათთვის (შენი სახელი გახდება "ანგარიში წაშლილია")</>
          ) : (
            <>Si tu supprimes ton compte :<br/>
            • Toutes tes annonces seront retirées<br/>
            • Tes données seront anonymisées immédiatement<br/>
            • Suppression physique sous 30 jours<br/>
            • Tu ne pourras pas récupérer ton compte<br/>
            • Tes conversations resteront visibles pour les autres (ton nom deviendra "Compte supprimé")</>
          )}
        </div>
      </div>

      <div style={{
        marginTop: 24,
        fontFamily: 'Inter', fontSize: 14, color: COLORS.text2,
        lineHeight: 1.5,
      }}>
        {ka ? (
          <>დასადასტურებლად, აკრიფე <strong style={{ color: COLORS.gold }}>{DELETE_KEYWORD}</strong> ქვემოთ:</>
        ) : (
          <>Pour confirmer, tape exactement <strong style={{ color: COLORS.gold }}>{DELETE_KEYWORD}</strong> ci-dessous :</>
        )}
      </div>

      <input
        type="text"
        value={confirmText}
        onChange={e => setConfirmText(e.target.value)}
        placeholder={DELETE_KEYWORD}
        style={{
          width: '100%', height: 52, marginTop: 12,
          padding: '0 16px', borderRadius: 12,
          background: COLORS.card,
          border: `1px solid ${error ? COLORS.red : COLORS.borderSoft}`,
          color: '#fff', fontFamily: 'Inter', fontSize: 16,
          outline: 'none', letterSpacing: 1,
        }}
      />

      {error && (
        <div style={{
          marginTop: 10, fontFamily: 'Inter', fontSize: 12, color: COLORS.red,
        }}>{error}</div>
      )}

      <button
        onClick={requestOtp}
        disabled={loading || !confirmText.trim()}
        style={{
          width: '100%', height: 52, marginTop: 20, borderRadius: 14,
          background: confirmText.trim() && !loading ? COLORS.red : COLORS.borderSoft,
          color: '#fff',
          fontFamily: 'Inter', fontSize: 15, fontWeight: 700,
          border: 'none', cursor: confirmText.trim() && !loading ? 'pointer' : 'not-allowed',
          opacity: confirmText.trim() && !loading ? 1 : 0.5,
        }}
      >
        {loading ? '...' : (ka ? 'მოითხოვე SMS კოდი წასაშლელად' : 'Recevoir le code SMS de suppression')}
      </button>

      <button
        onClick={onBack}
        style={{
          width: '100%', height: 44, marginTop: 12, borderRadius: 14,
          background: 'transparent', color: COLORS.text2,
          fontFamily: 'Inter', fontSize: 14, fontWeight: 500,
          border: `1px solid ${COLORS.borderSoft}`, cursor: 'pointer',
        }}
      >
        {ka ? 'გაუქმება' : 'Annuler'}
      </button>
    </LegalContainer>
  );
}
window.DeleteAccountScreen = DeleteAccountScreen;

// ============================================================
// 6. REPORT MODAL (signaler un user / annonce / message)
// Composant réutilisable, ouvert depuis n'importe quel écran.
// Props: { target: { type: 'user'|'listing'|'message', id: int }, lang, onClose }
// ============================================================

function ReportModal({ target, lang, onClose }) {
  const ka = lang === 'ka';
  const [reason, setReason] = React.useState('');
  const [description, setDescription] = React.useState('');
  const [loading, setLoading] = React.useState(false);
  const [error, setError] = React.useState(null);
  const [sent, setSent] = React.useState(false);

  const reasons = ka
    ? [
        { value: 'spam',           label: 'სპამი ან რეკლამა' },
        { value: 'inappropriate',  label: 'შეუსაბამო შინაარსი' },
        { value: 'harassment',     label: 'შევიწროება / შეურაცხყოფა' },
        { value: 'fake_account',   label: 'ცრუ ანგარიში' },
        { value: 'scam',           label: 'თაღლითობა' },
        { value: 'illegal',        label: 'არალეგალური მომსახურება' },
        { value: 'other',          label: 'სხვა' },
      ]
    : [
        { value: 'spam',           label: 'Spam ou publicité' },
        { value: 'inappropriate',  label: 'Contenu inapproprié' },
        { value: 'harassment',     label: 'Harcèlement / insultes' },
        { value: 'fake_account',   label: 'Faux compte' },
        { value: 'scam',           label: 'Arnaque' },
        { value: 'illegal',        label: 'Service illégal' },
        { value: 'other',          label: 'Autre' },
      ];

  const send = async () => {
    if (loading || !reason) return;
    setError(null);
    setLoading(true);
    try {
      const body = { reason, description: description.trim() || undefined };
      if (target.type === 'user')    body.target_user_id    = target.id;
      if (target.type === 'listing') body.target_listing_id = target.id;
      if (target.type === 'message') body.target_message_id = target.id;

      const res = await fetch((window.location.pathname.includes('/app/') ? '/app/api' : '/api') + '/reports.php', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + window.TrustaAuth.getToken(),
          'X-Lang': lang,
        },
        body: JSON.stringify(body),
      });
      const data = await res.json();
      if (!res.ok) throw data;
      setSent(true);
      setLoading(false);
    } catch (err) {
      setError(err.message || (ka ? 'შეცდომა' : 'Erreur'));
      setLoading(false);
    }
  };

  return (
    <div style={{
      position: 'fixed', inset: 0, zIndex: 300,
      background: 'rgba(0,0,0,0.75)', backdropFilter: 'blur(6px)',
      WebkitBackdropFilter: 'blur(6px)',
      display: 'flex', alignItems: 'flex-end', justifyContent: 'center',
    }} onClick={onClose}>
      <div onClick={e => e.stopPropagation()} style={{
        width: '100%', maxWidth: 440, maxHeight: '85vh', overflow: 'auto',
        background: COLORS.bg, borderRadius: '20px 20px 0 0',
        padding: '20px 24px 32px',
        border: `1px solid ${COLORS.borderSoft}`,
        animation: 'slideUp 0.25s ease-out',
      }}>
        <style>{`@keyframes slideUp { from { transform: translateY(40px); opacity: 0 } to { transform: translateY(0); opacity: 1 } }`}</style>

        {/* Handle bar */}
        <div style={{
          width: 40, height: 4, borderRadius: 2,
          background: COLORS.borderSoft,
          margin: '0 auto 16px',
        }} />

        {sent ? (
          <div style={{ textAlign: 'center', padding: '32px 0' }}>
            <div style={{ fontSize: 48, marginBottom: 12 }}>✅</div>
            <div style={{
              fontFamily: '"Playfair Display", serif', fontSize: 20, color: COLORS.gold,
              marginBottom: 8,
            }}>
              {ka ? 'მადლობა' : 'Merci'}
            </div>
            <div style={{
              fontFamily: 'Inter', fontSize: 14, color: COLORS.text2,
              lineHeight: 1.5, marginBottom: 24,
            }}>
              {ka
                ? 'შენი სიგნალი მიღებულია. ჩვენი გუნდი 24 საათში გადახედავს.'
                : 'Ton signalement a été enregistré. Notre équipe l\'examinera sous 24h.'}
            </div>
            <button onClick={onClose} style={{
              padding: '12px 28px', borderRadius: 100,
              background: COLORS.gold, color: '#000',
              fontFamily: 'Inter', fontSize: 14, fontWeight: 700,
              border: 'none', cursor: 'pointer',
            }}>
              {ka ? 'დახურვა' : 'Fermer'}
            </button>
          </div>
        ) : (
          <>
            <div style={{
              fontFamily: '"Playfair Display", serif', fontSize: 22, color: '#fff',
              marginBottom: 4,
            }}>
              {ka ? 'სიგნალის გაგზავნა' : 'Signaler'}
            </div>
            <div style={{
              fontFamily: 'Inter', fontSize: 13, color: COLORS.text2,
              marginBottom: 20,
            }}>
              {ka
                ? 'რა არის პრობლემა?'
                : 'Qu\'est-ce qui ne va pas ?'}
            </div>

            {/* Liste des raisons */}
            <div style={{ display: 'flex', flexDirection: 'column', gap: 8, marginBottom: 16 }}>
              {reasons.map(r => (
                <button key={r.value} onClick={() => setReason(r.value)} style={{
                  padding: '12px 16px', borderRadius: 12, textAlign: 'left',
                  background: reason === r.value ? 'rgba(212,175,55,0.10)' : COLORS.card,
                  border: `1px solid ${reason === r.value ? COLORS.gold : COLORS.borderSoft}`,
                  color: reason === r.value ? COLORS.gold : '#fff',
                  fontFamily: 'Inter', fontSize: 14, fontWeight: reason === r.value ? 600 : 400,
                  cursor: 'pointer',
                }}>
                  {r.label}
                </button>
              ))}
            </div>

            {/* Description optionnelle */}
            <textarea
              value={description}
              onChange={e => setDescription(e.target.value)}
              placeholder={ka ? 'დაამატე დეტალები (არასავალდებულო)' : 'Ajoute des détails (optionnel)'}
              rows={3}
              maxLength={1000}
              style={{
                width: '100%', padding: '10px 14px', borderRadius: 12,
                background: COLORS.card, border: `1px solid ${COLORS.borderSoft}`,
                color: '#fff', fontFamily: 'Inter', fontSize: 13, outline: 'none',
                resize: 'vertical', minHeight: 64, marginBottom: 16,
              }}
            />

            {error && (
              <div style={{
                marginBottom: 12, fontFamily: 'Inter', fontSize: 12, color: COLORS.red,
              }}>{error}</div>
            )}

            <button
              onClick={send}
              disabled={loading || !reason}
              style={{
                width: '100%', height: 50, borderRadius: 12,
                background: reason && !loading ? COLORS.gold : COLORS.borderSoft,
                color: reason && !loading ? '#000' : COLORS.text3,
                fontFamily: 'Inter', fontSize: 15, fontWeight: 700,
                border: 'none', cursor: reason && !loading ? 'pointer' : 'not-allowed',
                opacity: reason && !loading ? 1 : 0.5,
              }}
            >
              {loading ? '...' : (ka ? 'სიგნალის გაგზავნა' : 'Envoyer le signalement')}
            </button>

            <button onClick={onClose} style={{
              width: '100%', height: 44, marginTop: 8, borderRadius: 12,
              background: 'transparent', color: COLORS.text2,
              fontFamily: 'Inter', fontSize: 14,
              border: 'none', cursor: 'pointer',
            }}>
              {ka ? 'გაუქმება' : 'Annuler'}
            </button>
          </>
        )}
      </div>
    </div>
  );
}
window.ReportModal = ReportModal;

// ============================================================
// 7. BLOCK CONFIRM MODAL
// ============================================================

function BlockUserModal({ targetUser, lang, onClose, onBlocked }) {
  const ka = lang === 'ka';
  const [loading, setLoading] = React.useState(false);

  const block = async () => {
    if (loading) return;
    setLoading(true);
    try {
      const res = await fetch((window.location.pathname.includes('/app/') ? '/app/api' : '/api') + '/blocks.php', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + window.TrustaAuth.getToken(),
          'X-Lang': lang,
        },
        body: JSON.stringify({ target_user_id: targetUser.id }),
      });
      const data = await res.json();
      if (!res.ok) throw data;
      if (onBlocked) onBlocked(targetUser);
      onClose();
    } catch (err) {
      alert(err.message || 'Erreur');
      setLoading(false);
    }
  };

  return (
    <div style={{
      position: 'fixed', inset: 0, zIndex: 300,
      background: 'rgba(0,0,0,0.75)', backdropFilter: 'blur(6px)',
      WebkitBackdropFilter: 'blur(6px)',
      display: 'flex', alignItems: 'center', justifyContent: 'center',
      padding: 24,
    }} onClick={onClose}>
      <div onClick={e => e.stopPropagation()} style={{
        width: '100%', maxWidth: 400,
        background: COLORS.bg, borderRadius: 20,
        padding: 28, border: `1px solid ${COLORS.borderSoft}`,
      }}>
        <div style={{ fontSize: 36, textAlign: 'center', marginBottom: 12 }}>🚫</div>
        <div style={{
          fontFamily: '"Playfair Display", serif', fontSize: 20, color: '#fff',
          textAlign: 'center', marginBottom: 10,
        }}>
          {ka ? 'მომხმარებლის დაბლოკვა' : 'Bloquer l\'utilisateur'}
        </div>
        <div style={{
          fontFamily: 'Inter', fontSize: 14, color: COLORS.text2,
          lineHeight: 1.5, textAlign: 'center', marginBottom: 20,
        }}>
          {ka ? (
            <>თუ დაბლოკავ <strong style={{ color: COLORS.gold }}>{targetUser.name}</strong>-ს:<br/><br/>
            • ვერ ნახავ მის განცხადებებს<br/>
            • ვერ მიიღებ მისგან შეტყობინებებს<br/>
            • ის ვერ დაგიკავშირდება<br/><br/>
            შეგიძლია მოგვიანებით განბლოკო პროფილიდან.</>
          ) : (
            <>Si tu bloques <strong style={{ color: COLORS.gold }}>{targetUser.name}</strong> :<br/><br/>
            • Tu ne verras plus ses annonces<br/>
            • Tu ne recevras plus ses messages<br/>
            • Il ne pourra plus te contacter<br/><br/>
            Tu peux le débloquer plus tard depuis ton Profil.</>
          )}
        </div>

        <button
          onClick={block}
          disabled={loading}
          style={{
            width: '100%', height: 50, borderRadius: 12,
            background: COLORS.red, color: '#fff',
            fontFamily: 'Inter', fontSize: 15, fontWeight: 700,
            border: 'none', cursor: loading ? 'not-allowed' : 'pointer',
            opacity: loading ? 0.6 : 1,
          }}
        >
          {loading ? '...' : (ka ? 'დაბლოკვა' : 'Bloquer')}
        </button>

        <button onClick={onClose} style={{
          width: '100%', height: 44, marginTop: 8, borderRadius: 12,
          background: 'transparent', color: COLORS.text2,
          fontFamily: 'Inter', fontSize: 14,
          border: `1px solid ${COLORS.borderSoft}`, cursor: 'pointer',
        }}>
          {ka ? 'გაუქმება' : 'Annuler'}
        </button>
      </div>
    </div>
  );
}
window.BlockUserModal = BlockUserModal;

// ============================================================
// 8. BLOCKED USERS SCREEN (gestion depuis Profil)
// ============================================================

function BlockedUsersScreen({ onBack, lang }) {
  const ka = lang === 'ka';
  const [blocked, setBlocked] = React.useState(null);
  const [error, setError] = React.useState(null);

  const apiBase = window.location.pathname.includes('/app/') ? '/app/api' : '/api';

  const load = async () => {
    setError(null);
    try {
      const res = await fetch(apiBase + '/blocks.php', {
        headers: {
          'Authorization': 'Bearer ' + window.TrustaAuth.getToken(),
          'X-Lang': lang,
        },
      });
      const data = await res.json();
      if (!res.ok) throw data;
      setBlocked(data.blocked || []);
    } catch (err) {
      setError(err.message || 'Erreur');
      setBlocked([]);
    }
  };

  React.useEffect(() => { load(); }, []);

  const unblock = async (userId) => {
    try {
      const res = await fetch(apiBase + '/blocks.php', {
        method: 'DELETE',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + window.TrustaAuth.getToken(),
          'X-Lang': lang,
        },
        body: JSON.stringify({ target_user_id: userId }),
      });
      if (!res.ok) throw await res.json();
      setBlocked(blocked.filter(u => u.id !== userId));
    } catch (err) {
      alert(err.message || 'Erreur');
    }
  };

  return (
    <LegalContainer onBack={onBack} title={ka ? 'დაბლოკილი მომხმარებლები' : 'Utilisateurs bloqués'}>
      {blocked === null ? (
        <div style={{ textAlign: 'center', padding: 40, color: COLORS.text3, fontFamily: 'Inter' }}>
          {ka ? 'იტვირთება…' : 'Chargement…'}
        </div>
      ) : blocked.length === 0 ? (
        <div style={{ textAlign: 'center', padding: '60px 24px', color: COLORS.text2, fontFamily: 'Inter' }}>
          <div style={{ fontSize: 48, marginBottom: 12 }}>👌</div>
          <div style={{ fontSize: 15, lineHeight: 1.5 }}>
            {ka
              ? 'არავინ გაქვს დაბლოკილი. სუფთა ცა ⛅'
              : 'Tu n\'as bloqué personne. Ciel dégagé ⛅'}
          </div>
        </div>
      ) : (
        <div style={{ display: 'flex', flexDirection: 'column', gap: 10, marginTop: 8 }}>
          {blocked.map(u => (
            <div key={u.id} style={{
              display: 'flex', alignItems: 'center', gap: 12,
              padding: '12px 14px', borderRadius: 14,
              background: COLORS.card, border: `1px solid ${COLORS.borderSoft}`,
            }}>
              <div style={{
                width: 40, height: 40, borderRadius: '50%',
                background: COLORS.borderSoft,
                backgroundImage: u.profile_photo ? `url(${u.profile_photo})` : 'none',
                backgroundSize: 'cover', backgroundPosition: 'center',
                display: 'flex', alignItems: 'center', justifyContent: 'center',
                fontFamily: '"Playfair Display", serif', color: COLORS.gold, fontSize: 16, fontWeight: 600,
              }}>
                {!u.profile_photo && u.name ? u.name.charAt(0).toUpperCase() : ''}
              </div>
              <div style={{ flex: 1, minWidth: 0 }}>
                <div style={{
                  fontFamily: 'Inter', fontSize: 14, fontWeight: 600, color: '#fff',
                  whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis',
                }}>{u.name}</div>
                {u.city && (
                  <div style={{ fontFamily: 'Inter', fontSize: 12, color: COLORS.text3 }}>
                    📍 {u.city}
                  </div>
                )}
              </div>
              <button onClick={() => unblock(u.id)} style={{
                padding: '8px 14px', borderRadius: 100,
                background: 'transparent', color: COLORS.gold,
                fontFamily: 'Inter', fontSize: 12, fontWeight: 600,
                border: `1px solid ${COLORS.gold}`, cursor: 'pointer',
              }}>
                {ka ? 'განბლოკვა' : 'Débloquer'}
              </button>
            </div>
          ))}
        </div>
      )}

      {error && (
        <div style={{
          marginTop: 16, padding: 12, borderRadius: 10,
          background: 'rgba(239,68,68,0.08)', border: `1px solid ${COLORS.red}`,
          color: COLORS.red, fontFamily: 'Inter', fontSize: 13, textAlign: 'center',
        }}>{error}</div>
      )}
    </LegalContainer>
  );
}
window.BlockedUsersScreen = BlockedUsersScreen;
