#!/usr/bin/env python3
"""Kiểm tra dữ liệu thương hiệu: python3 validate.py [key ...]"""
import json,sys,re,os,glob
here=os.path.dirname(os.path.abspath(__file__))
BAD=['giá','₫','vnđ','đánh giá','sao ','tốt nhất','số 1','rẻ nhất','bền nhất','ít lỗi']
def check(path):
    e=[]; key=os.path.basename(path)[:-5]
    try: d=json.load(open(path,encoding='utf-8'))
    except Exception as x: return ['JSON lỗi: %s'%x]
    for k in ['key','title','attrs','brands','checked']:
        if k not in d: e.append('thiếu '+k)
    if e: return e
    if d['key']!=key: e.append('key khác tên file')
    ak={a['k'] for a in d['attrs']}
    if not 6<=len(d['attrs'])<=10: e.append('attrs 6-10')
    for a in d['attrs']:
        if not {'k','label','dir'}<=set(a) or a['dir'] not in ('high','low','none'): e.append('attr sai: %s'%a)
    if not 4<=len(d['brands'])<=6: e.append('brands 4-6 (hiện %d)'%len(d['brands']))
    slugs=set()
    for b in d['brands']:
        for k in ['slug','name','focus','official','strengths','cautions','series']:
            if k not in b: e.append('brand thiếu '+k+' '+b.get('name','?'))
        if b.get('slug') in slugs: e.append('slug trùng '+str(b.get('slug')))
        slugs.add(b.get('slug'))
        if not re.match(r'^https://',b.get('official','')): e.append('official phải https: '+b.get('name',''))
        if not 2<=len(b.get('strengths',[]))<=3 or not 1<=len(b.get('cautions',[]))<=2: e.append('strengths 2-3, cautions 1-2: '+b.get('name',''))
        ss=b.get('series',[])
        if not 2<=len(ss)<=4: e.append('series 2-4: '+b.get('name',''))
        for s in ss:
            for k in ['name','segment','summary','specs','source','checked']:
                if k not in s: e.append('series thiếu %s: %s %s'%(k,b.get('name'),s.get('name')))
            if not re.match(r'^https://',s.get('source','')): e.append('source phải https: %s'%s.get('name'))
            filled=0
            for k,v in s.get('specs',{}).items():
                if k not in ak: e.append('spec key lạ %s'%k)
                if not isinstance(v,dict) or 'v' not in v or not str(v['v']).strip(): e.append('spec %s phải {"v":..,"n":..}'%k)
                else: filled+=1
            if filled < max(4,int(len(ak)*0.6)): e.append('series %s %s điền ít spec (%d/%d)'%(b.get('name'),s.get('name'),filled,len(ak)))
        txt=json.dumps({k:b[k] for k in ('focus','strengths','cautions') if k in b},ensure_ascii=False).lower()
        for w in BAD:
            if w in txt: e.append('cụm bị cấm "%s" ở %s'%(w,b.get('name')))
    return e
files=[os.path.join(here,k+'.json') for k in sys.argv[1:]] or sorted(glob.glob(here+'/*.json'))
bad=0
for f in files:
    er=check(f); print(('OK  ' if not er else 'LỖI ')+os.path.basename(f)+(' — '+'; '.join(er[:8]) if er else '')); bad+=bool(er)
sys.exit(1 if bad else 0)
